diff --git a/.eslintignore b/.eslintignore index 7d807b65..cbfa8917 100644 --- a/.eslintignore +++ b/.eslintignore @@ -21,4 +21,6 @@ vite.config.js /src-tauri/target/**/* reverbGen.mjs hydra.mjs -jsdoc-synonyms.js \ No newline at end of file +jsdoc-synonyms.js +packages/hs2js/src/hs2js.mjs +samples \ No newline at end of file diff --git a/.eslintrc.json b/.eslintrc.json index 71251141..cf237947 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,5 +1,6 @@ { "env": { + "node": true, "browser": true, "es2021": true }, diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index f9bc117c..adb883e5 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -130,20 +130,14 @@ npx lerna version --no-private # publish all packages inside /packages using pnpm! don't use lerna to publish!! pnpm --filter "./packages/**" publish --dry-run -# the last command was only a dry-run, make sure everything looks ok, if yes, run the same command without flag +# the last command was only a dry-run. if everything looks ok, run this: + +pnpm --filter "./packages/**" publish --access public ``` To manually publish a single package, increase the version in the `package.json`, then run `pnpm publish`. Important: Always publish with `pnpm`, as `npm` does not support overriding main files in `publishConfig`, which is done in all the packages. -### New Packages - -To add a new package, you have to publish it manually the first time, using: - -```sh -cd packages/ && pnpm publish --access public -``` - ## Have Fun Remember to have fun, and that this project is driven by the passion of volunteers! diff --git a/README.md b/README.md index 7743bcab..475497a3 100644 --- a/README.md +++ b/README.md @@ -14,10 +14,16 @@ An experiment in making a [Tidal](https://github.com/tidalcycles/tidal/) using w After cloning the project, you can run the REPL locally: -```bash -pnpm i -pnpm dev -``` +1. Install [Node.js](https://nodejs.org/) +2. Install [pnpm](https://pnpm.io/installation) +3. Install dependencies by running the following command: + ```bash + pnpm i + ``` +4. Run the development server: + ```bash + pnpm dev + ``` ## Using Strudel In Your Project diff --git a/examples/buildless/headless-simple.html b/examples/buildless/headless-simple.html index 15a56161..61533447 100644 --- a/examples/buildless/headless-simple.html +++ b/examples/buildless/headless-simple.html @@ -1,9 +1,31 @@ - - - - + + + + + + + + + + + + diff --git a/examples/buildless/headless-with-samples.html b/examples/buildless/headless-with-samples.html index 18b5e379..3ac6d42e 100644 --- a/examples/buildless/headless-with-samples.html +++ b/examples/buildless/headless-with-samples.html @@ -1,16 +1,24 @@ - - - - - - + + + + + + + + + + + + + + diff --git a/examples/buildless/hs2js.html b/examples/buildless/hs2js.html new file mode 100644 index 00000000..96b53c53 --- /dev/null +++ b/examples/buildless/hs2js.html @@ -0,0 +1,9 @@ + + + diff --git a/examples/buildless/tidal.html b/examples/buildless/tidal.html new file mode 100644 index 00000000..16416b56 --- /dev/null +++ b/examples/buildless/tidal.html @@ -0,0 +1,98 @@ + + + + + + tidal.html + + + +

+    
+    
+    
+  
+
diff --git a/examples/codemirror-repl/main.js b/examples/codemirror-repl/main.js
index 815db187..5b5714fb 100644
--- a/examples/codemirror-repl/main.js
+++ b/examples/codemirror-repl/main.js
@@ -1,6 +1,7 @@
 import { StrudelMirror } from '@strudel/codemirror';
 import { funk42 } from './tunes';
-import { drawPianoroll, evalScope } from '@strudel/core';
+import { evalScope } from '@strudel/core';
+import { drawPianoroll } from '@strudel/draw';
 import './style.css';
 import { initAudioOnFirstClick } from '@strudel/webaudio';
 import { transpiler } from '@strudel/transpiler';
@@ -26,6 +27,7 @@ const editor = new StrudelMirror({
     initAudioOnFirstClick(); // needed to make the browser happy (don't await this here..)
     const loadModules = evalScope(
       import('@strudel/core'),
+      import('@strudel/draw'),
       import('@strudel/mini'),
       import('@strudel/tonal'),
       import('@strudel/webaudio'),
diff --git a/examples/codemirror-repl/package.json b/examples/codemirror-repl/package.json
index 403f34af..ec178d48 100644
--- a/examples/codemirror-repl/package.json
+++ b/examples/codemirror-repl/package.json
@@ -14,6 +14,7 @@
   "dependencies": {
     "@strudel/codemirror": "workspace:*",
     "@strudel/core": "workspace:*",
+    "@strudel/draw": "workspace:*",
     "@strudel/mini": "workspace:*",
     "@strudel/soundfonts": "workspace:*",
     "@strudel/tonal": "workspace:*",
diff --git a/examples/tidal-repl/.gitignore b/examples/tidal-repl/.gitignore
new file mode 100644
index 00000000..ce99c129
--- /dev/null
+++ b/examples/tidal-repl/.gitignore
@@ -0,0 +1,27 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
+
+public/tree-sitter.wasm
+public/tree-sitter-haskell.wasm
diff --git a/examples/tidal-repl/README.md b/examples/tidal-repl/README.md
new file mode 100644
index 00000000..8b07ac19
--- /dev/null
+++ b/examples/tidal-repl/README.md
@@ -0,0 +1,10 @@
+# @strudel/tidal
+
+This is an experiment in implementing tree-sitter for parsing haskell.
+
+```sh
+pnpm i
+cd haskell
+pnpm copy-wasm
+pnpm dev
+```
diff --git a/examples/tidal-repl/index.html b/examples/tidal-repl/index.html
new file mode 100644
index 00000000..25dc693e
--- /dev/null
+++ b/examples/tidal-repl/index.html
@@ -0,0 +1,32 @@
+
+
+  
+    
+    
+    Tree sitter test
+    
+  
+  
+    
+    

+    
+  
+
diff --git a/examples/tidal-repl/main.js b/examples/tidal-repl/main.js
new file mode 100644
index 00000000..3ce301db
--- /dev/null
+++ b/examples/tidal-repl/main.js
@@ -0,0 +1,83 @@
+import { run, parse, loadParser } from 'hs2js';
+import { initStrudel, reify, late, samples, stack } from '@strudel/web';
+
+initStrudel({
+  prebake: () => samples('github:tidalcycles/dirt-samples'),
+});
+
+const ready = loadParser();
+
+const textarea = document.getElementById('code');
+if (window.location.hash) {
+  textarea.value = atob(window.location.hash.slice(1));
+} else {
+  textarea.value = 'd1 $ s "jvbass(3,8)"';
+}
+textarea.addEventListener('input', (e) => {
+  window.location.hash = btoa(e.target.value);
+  update();
+});
+update();
+
+function getInfixOperators() {
+  let operators = {
+    '>': 'set',
+    '#': 'set',
+    '+': 'add',
+    '-': 'sub',
+    '*': 'mul',
+    '/': 'div',
+  };
+  let alignments = {
+    in: (s) => '|' + s,
+    out: (s) => s + '|',
+    mix: (s) => '|' + s + '|',
+  };
+  let ops = {};
+  Object.entries(operators).forEach(([o, name]) => {
+    // operator without alignment
+    ops[o] = (l, r) => reify(l)[name](reify(r));
+    Object.entries(alignments).forEach(([a, getSymbol]) => {
+      // get symbol with alignment
+      let symbol = getSymbol(o);
+      ops[symbol] = (l, r) => reify(l)[name][a](reify(r));
+    });
+  });
+  ops['~>'] = (l, r) => reify(l).late(reify(r));
+  ops['<~'] = (l, r) => reify(l).early(reify(r));
+  ops['<$>'] = (l, r) => reify(r).fmap(l).outerJoin(); // is this right?
+  return ops;
+}
+const ops = getInfixOperators();
+
+async function update() {
+  let result, tree;
+  await ready;
+  try {
+    tree = parse(textarea.value);
+  } catch (err) {
+    console.warn('parse error');
+    console.error(err);
+  }
+  console.log('parsed tree');
+  console.log(tree.rootNode.toString());
+  try {
+    let patterns = {};
+    window.p = (name, pattern) => {
+      patterns[name] = pattern;
+    };
+    window.d1 = (pat) => window.p(1, pat);
+    window.d2 = (pat) => window.p(2, pat);
+    window.d3 = (pat) => window.p(3, pat);
+    window.rot = late;
+    result = run(tree.rootNode, window, ops);
+    if (Object.values(patterns).length) {
+      stack(...Object.values(patterns)).play();
+    }
+  } catch (err) {
+    console.warn('eval error');
+    console.error(err);
+    result = 'ERROR: ' + err.message;
+  }
+  document.getElementById('result').innerHTML = 'Result: ' + result;
+}
diff --git a/examples/tidal-repl/package.json b/examples/tidal-repl/package.json
new file mode 100644
index 00000000..f1e1337c
--- /dev/null
+++ b/examples/tidal-repl/package.json
@@ -0,0 +1,36 @@
+{
+  "name": "tidal-repl",
+  "private": true,
+  "version": "0.0.1",
+  "type": "module",
+  "scripts": {
+    "dev": "vite",
+    "build": "pnpm copy-wasm && vite build",
+    "preview": "vite preview",
+    "copy-wasm": "cp node_modules/hs2js/dist/tree-sitter.wasm public && cp node_modules/hs2js/dist/tree-sitter-haskell.wasm public"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/tidalcycles/strudel.git"
+  },
+  "keywords": [
+    "titdalcycles",
+    "strudel",
+    "pattern",
+    "livecoding",
+    "algorave"
+  ],
+  "author": "Felix Roos ",
+  "license": "AGPL-3.0-or-later",
+  "bugs": {
+    "url": "https://github.com/tidalcycles/strudel/issues"
+  },
+  "homepage": "https://github.com/tidalcycles/strudel#readme",
+  "dependencies": {
+    "@strudel/web": "workspace:*",
+    "hs2js": "workspace:*"
+  },
+  "devDependencies": {
+    "vite": "^5.0.8"
+  }
+}
diff --git a/examples/tidal-repl/public/README.md b/examples/tidal-repl/public/README.md
new file mode 100644
index 00000000..6f8ff001
--- /dev/null
+++ b/examples/tidal-repl/public/README.md
@@ -0,0 +1,3 @@
+# public
+
+this file is just here to make sure the public folder exists
diff --git a/package.json b/package.json
index 8aefa102..250ca22c 100644
--- a/package.json
+++ b/package.json
@@ -56,18 +56,18 @@
   },
   "devDependencies": {
     "@tauri-apps/cli": "^1.5.9",
-    "@vitest/ui": "^1.1.0",
-    "acorn": "^8.11.3",
+    "@vitest/ui": "^2.1.3",
+    "acorn": "^8.13.0",
     "dependency-tree": "^10.0.9",
     "eslint": "^8.56.0",
-    "eslint-plugin-import": "^2.29.1",
+    "eslint-plugin-import": "^2.31.0",
     "events": "^3.3.0",
-    "jsdoc": "^4.0.2",
+    "jsdoc": "^4.0.3",
     "jsdoc-json": "^2.0.2",
     "jsdoc-to-markdown": "^8.0.0",
-    "lerna": "^8.0.1",
-    "prettier": "^3.1.1",
+    "lerna": "^8.1.8",
+    "prettier": "^3.3.3",
     "rollup-plugin-visualizer": "^5.12.0",
-    "vitest": "^1.1.0"
+    "vitest": "^2.1.3"
   }
 }
diff --git a/packages/codemirror/codemirror.mjs b/packages/codemirror/codemirror.mjs
index d28bf95d..5886c476 100644
--- a/packages/codemirror/codemirror.mjs
+++ b/packages/codemirror/codemirror.mjs
@@ -1,4 +1,5 @@
 import { closeBrackets } from '@codemirror/autocomplete';
+export { toggleComment, toggleBlockComment, toggleLineComment, toggleBlockCommentByLine } from '@codemirror/commands';
 // import { search, highlightSelectionMatches } from '@codemirror/search';
 import { history } from '@codemirror/commands';
 import { javascript } from '@codemirror/lang-javascript';
@@ -12,7 +13,7 @@ import {
   lineNumbers,
   drawSelection,
 } from '@codemirror/view';
-import { Pattern, repl } from '@strudel/core';
+import { repl, registerControl } from '@strudel/core';
 import { Drawer, cleanupDraw } from '@strudel/draw';
 import { isAutoCompletionEnabled } from './autocomplete.mjs';
 import { isTooltipEnabled } from './tooltip.mjs';
@@ -98,10 +99,8 @@ export function initEditor({ initialCode = '', onChange, onEvaluate, onStop, roo
           },
           {
             key: 'Alt-.',
-            run: (_, e) => {
-              e.preventDefault();
-              onStop?.();
-            },
+            preventDefault: true,
+            run: () => onStop?.(),
           },
           /* {
           key: 'Ctrl-Shift-.',
@@ -134,57 +133,50 @@ export class StrudelMirror {
       autodraw,
       prebake,
       bgFill = true,
+      solo = true,
       ...replOptions
     } = options;
     this.code = initialCode;
     this.root = root;
     this.miniLocations = [];
     this.widgets = [];
-    this.painters = [];
     this.drawTime = drawTime;
     this.drawContext = drawContext;
     this.onDraw = onDraw || this.draw;
     this.id = id || s4();
+    this.solo = solo;
 
-    this.drawer = new Drawer((haps, time) => {
+    this.drawer = new Drawer((haps, time, _, painters) => {
       const currentFrame = haps.filter((hap) => hap.isActive(time));
       this.highlight(currentFrame, time);
-      this.onDraw(haps, time, this.painters);
+      this.onDraw(haps, time, painters);
     }, drawTime);
 
     this.prebaked = prebake();
     autodraw && this.drawFirstFrame();
-
     this.repl = repl({
       ...replOptions,
+      id,
       onToggle: (started) => {
         replOptions?.onToggle?.(started);
         if (started) {
-          this.adjustDrawTime();
           this.drawer.start(this.repl.scheduler);
-          // stop other repls when this one is started
-          document.dispatchEvent(
-            new CustomEvent('start-repl', {
-              detail: this.id,
-            }),
-          );
+          if (this.solo) {
+            // stop other repls when this one is started
+            document.dispatchEvent(
+              new CustomEvent('start-repl', {
+                detail: this.id,
+              }),
+            );
+          }
         } else {
           this.drawer.stop();
           updateMiniLocations(this.editor, []);
-          cleanupDraw(false);
+          cleanupDraw(true, id);
         }
       },
       beforeEval: async () => {
-        cleanupDraw();
-        this.painters = [];
-        const self = this;
-        // this is similar to repl.mjs > injectPatternMethods
-        // maybe there is a solution without prototype hacking, but hey, it works
-        // we need to do this befor every eval to make sure it works with multiple StrudelMirror's side by side
-        Pattern.prototype.onPaint = function (onPaint) {
-          self.painters.push(onPaint);
-          return this;
-        };
+        cleanupDraw(true, id);
         await this.prebaked;
         await replOptions?.beforeEval?.();
       },
@@ -198,8 +190,11 @@ export class StrudelMirror {
         updateWidgets(this.editor, widgets);
         updateMiniLocations(this.editor, this.miniLocations);
         replOptions?.afterEval?.(options);
-        this.adjustDrawTime();
-        this.drawer.invalidate();
+        // if no painters are set (.onPaint was not called), then we only need the present moment (for highlighting)
+        const drawTime = options.pattern.getPainters().length ? this.drawTime : [0, 0];
+        this.drawer.setDrawTime(drawTime);
+        // invalidate drawer after we've set the appropriate drawTime
+        this.drawer.invalidate(this.repl.scheduler);
       },
     });
     this.editor = initEditor({
@@ -228,19 +223,14 @@ export class StrudelMirror {
 
     // stop this repl when another repl is started
     this.onStartRepl = (e) => {
-      if (e.detail !== this.id) {
+      if (this.solo && e.detail !== this.id) {
         this.stop();
       }
     };
     document.addEventListener('start-repl', this.onStartRepl);
   }
-  // adjusts draw time depending on if there are painters
-  adjustDrawTime() {
-    // when no painters are set, [0,0] is enough (just highlighting)
-    this.drawer.setDrawTime(this.painters.length ? this.drawTime : [0, 0]);
-  }
-  draw(haps, time) {
-    this.painters?.forEach((painter) => painter(this.drawContext, time, haps, this.drawTime));
+  draw(haps, time, painters) {
+    painters?.forEach((painter) => painter(this.drawContext, time, haps, this.drawTime));
   }
   async drawFirstFrame() {
     if (!this.onDraw) {
@@ -252,7 +242,7 @@ export class StrudelMirror {
       await this.repl.evaluate(this.code, false);
       this.drawer.invalidate(this.repl.scheduler, -0.001);
       // draw at -0.001 to avoid haps at 0 to be visualized as active
-      this.onDraw?.(this.drawer.visibleHaps, -0.001, this.painters);
+      this.onDraw?.(this.drawer.visibleHaps, -0.001, this.drawer.painters);
     } catch (err) {
       console.warn('first frame could not be painted');
     }
@@ -345,6 +335,17 @@ export class StrudelMirror {
   clear() {
     this.onStartRepl && document.removeEventListener('start-repl', this.onStartRepl);
   }
+  getCursorLocation() {
+    return this.editor.state.selection.main.head;
+  }
+  setCursorLocation(col) {
+    return this.editor.dispatch({ selection: { anchor: col } });
+  }
+  appendCode(code) {
+    const cursor = this.getCursorLocation();
+    this.setCode(this.code + code);
+    this.setCursorLocation(cursor);
+  }
 }
 
 function parseBooleans(value) {
@@ -357,3 +358,12 @@ function s4() {
     .toString(16)
     .substring(1);
 }
+
+/**
+ * Overrides the css of highlighted events. Make sure to use single quotes!
+ * @name markcss
+ * @example
+ * note("c a f e")
+ * .markcss('text-decoration:underline')
+ */
+export const markcss = registerControl('markcss');
diff --git a/packages/codemirror/highlight.mjs b/packages/codemirror/highlight.mjs
index 2f8cb38d..d333986c 100644
--- a/packages/codemirror/highlight.mjs
+++ b/packages/codemirror/highlight.mjs
@@ -93,6 +93,7 @@ const miniLocationHighlights = EditorView.decorations.compute([miniLocations, vi
     if (haps.has(id)) {
       const hap = haps.get(id);
       const color = hap.value?.color ?? 'var(--foreground)';
+      const style = hap.value?.markcss || `outline: solid 2px ${color}`;
       // Get explicit channels for color values
       /* 
       const swatch = document.createElement('div');
@@ -114,7 +115,7 @@ const miniLocationHighlights = EditorView.decorations.compute([miniLocations, vi
         to,
         Decoration.mark({
           // attributes: { style: `outline: solid 2px rgba(${channels.join(', ')})` },
-          attributes: { style: `outline: solid 2px ${color}` },
+          attributes: { style },
         }),
       );
     }
diff --git a/packages/codemirror/package.json b/packages/codemirror/package.json
index 133c4148..5ef5e73b 100644
--- a/packages/codemirror/package.json
+++ b/packages/codemirror/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@strudel/codemirror",
-  "version": "1.0.1",
+  "version": "1.1.0",
   "description": "Codemirror Extensions for Strudel",
   "main": "index.mjs",
   "publishConfig": {
diff --git a/packages/codemirror/themes/algoboy.mjs b/packages/codemirror/themes/algoboy.mjs
index eba95b98..5c6a91b8 100644
--- a/packages/codemirror/themes/algoboy.mjs
+++ b/packages/codemirror/themes/algoboy.mjs
@@ -12,31 +12,31 @@ export const settings = {
   gutterBackground: 'transparent',
   gutterForeground: '#0f380f',
   light: true,
-  customStyle: '.cm-line { line-height: 1 }',
+  // customStyle: '.cm-line { line-height: 1 }',
 };
 export default createTheme({
   theme: 'light',
   settings,
   styles: [
-    { tag: t.labelName, color: '#0f380f' },
-    { tag: t.keyword, color: '#0f380f' },
-    { tag: t.operator, color: '#0f380f' },
-    { tag: t.special(t.variableName), color: '#0f380f' },
-    { tag: t.typeName, color: '#0f380f' },
-    { tag: t.atom, color: '#0f380f' },
-    { tag: t.number, color: '#0f380f' },
-    { tag: t.definition(t.variableName), color: '#0f380f' },
-    { tag: t.string, color: '#0f380f' },
-    { tag: t.special(t.string), color: '#0f380f' },
-    { tag: t.comment, color: '#0f380f' },
-    { tag: t.variableName, color: '#0f380f' },
-    { tag: t.tagName, color: '#0f380f' },
-    { tag: t.bracket, color: '#0f380f' },
-    { tag: t.meta, color: '#0f380f' },
-    { tag: t.attributeName, color: '#0f380f' },
-    { tag: t.propertyName, color: '#0f380f' },
-    { tag: t.className, color: '#0f380f' },
-    { tag: t.invalid, color: '#0f380f' },
-    { tag: [t.unit, t.punctuation], color: '#0f380f' },
+    { tag: t.labelName, color: 'inherit' },
+    { tag: t.keyword, color: 'inherit' },
+    { tag: t.operator, color: 'inherit' },
+    { tag: t.special(t.variableName), color: 'inherit' },
+    { tag: t.typeName, color: 'inherit' },
+    { tag: t.atom, color: 'inherit' },
+    { tag: t.number, color: 'inherit' },
+    { tag: t.definition(t.variableName), color: 'inherit' },
+    { tag: t.string, color: 'inherit' },
+    { tag: t.special(t.string), color: 'inherit' },
+    { tag: t.comment, color: 'inherit' },
+    { tag: t.variableName, color: 'inherit' },
+    { tag: t.tagName, color: 'inherit' },
+    { tag: t.bracket, color: 'inherit' },
+    { tag: t.meta, color: 'inherit' },
+    { tag: t.attributeName, color: 'inherit' },
+    { tag: t.propertyName, color: 'inherit' },
+    { tag: t.className, color: 'inherit' },
+    { tag: t.invalid, color: 'inherit' },
+    { tag: [t.unit, t.punctuation], color: 'inherit' },
   ],
 });
diff --git a/packages/codemirror/themes/blackscreen.mjs b/packages/codemirror/themes/blackscreen.mjs
index 5671a6d8..ca67ea9a 100644
--- a/packages/codemirror/themes/blackscreen.mjs
+++ b/packages/codemirror/themes/blackscreen.mjs
@@ -15,25 +15,25 @@ export default createTheme({
   theme: 'dark',
   settings,
   styles: [
-    { tag: t.labelName, color: 'white' },
-    { tag: t.keyword, color: 'white' },
-    { tag: t.operator, color: 'white' },
-    { tag: t.special(t.variableName), color: 'white' },
-    { tag: t.typeName, color: 'white' },
-    { tag: t.atom, color: 'white' },
-    { tag: t.number, color: 'white' },
-    { tag: t.definition(t.variableName), color: 'white' },
-    { tag: t.string, color: 'white' },
-    { tag: t.special(t.string), color: 'white' },
-    { tag: t.comment, color: 'white' },
-    { tag: t.variableName, color: 'white' },
-    { tag: t.tagName, color: 'white' },
-    { tag: t.bracket, color: 'white' },
-    { tag: t.meta, color: 'white' },
-    { tag: t.attributeName, color: 'white' },
-    { tag: t.propertyName, color: 'white' },
-    { tag: t.className, color: 'white' },
-    { tag: t.invalid, color: 'white' },
-    { tag: [t.unit, t.punctuation], color: 'white' },
+    { tag: t.labelName, color: 'inherit' },
+    { tag: t.keyword, color: 'inherit' },
+    { tag: t.operator, color: 'inherit' },
+    { tag: t.special(t.variableName), color: 'inherit' },
+    { tag: t.typeName, color: 'inherit' },
+    { tag: t.atom, color: 'inherit' },
+    { tag: t.number, color: 'inherit' },
+    { tag: t.definition(t.variableName), color: 'inherit' },
+    { tag: t.string, color: 'inherit' },
+    { tag: t.special(t.string), color: 'inherit' },
+    { tag: t.comment, color: 'inherit' },
+    { tag: t.variableName, color: 'inherit' },
+    { tag: t.tagName, color: 'inherit' },
+    { tag: t.bracket, color: 'inherit' },
+    { tag: t.meta, color: 'inherit' },
+    { tag: t.attributeName, color: 'inherit' },
+    { tag: t.propertyName, color: 'inherit' },
+    { tag: t.className, color: 'inherit' },
+    { tag: t.invalid, color: 'inherit' },
+    { tag: [t.unit, t.punctuation], color: 'inherit' },
   ],
 });
diff --git a/packages/codemirror/themes/bluescreen.mjs b/packages/codemirror/themes/bluescreen.mjs
index eb04c411..4f5dff2f 100644
--- a/packages/codemirror/themes/bluescreen.mjs
+++ b/packages/codemirror/themes/bluescreen.mjs
@@ -18,25 +18,25 @@ export default createTheme({
   theme: 'dark',
   settings,
   styles: [
-    { tag: t.labelName, color: 'white' },
-    { tag: t.keyword, color: 'white' },
-    { tag: t.operator, color: 'white' },
-    { tag: t.special(t.variableName), color: 'white' },
-    { tag: t.typeName, color: 'white' },
-    { tag: t.atom, color: 'white' },
-    { tag: t.number, color: 'white' },
-    { tag: t.definition(t.variableName), color: 'white' },
-    { tag: t.string, color: 'white' },
-    { tag: t.special(t.string), color: 'white' },
-    { tag: t.comment, color: 'white' },
-    { tag: t.variableName, color: 'white' },
-    { tag: t.tagName, color: 'white' },
-    { tag: t.bracket, color: 'white' },
-    { tag: t.meta, color: 'white' },
-    { tag: t.attributeName, color: 'white' },
-    { tag: t.propertyName, color: 'white' },
-    { tag: t.className, color: 'white' },
-    { tag: t.invalid, color: 'white' },
-    { tag: [t.unit, t.punctuation], color: 'white' },
+    { tag: t.labelName, color: 'inherit' },
+    { tag: t.keyword, color: 'inherit' },
+    { tag: t.operator, color: 'inherit' },
+    { tag: t.special(t.variableName), color: 'inherit' },
+    { tag: t.typeName, color: 'inherit' },
+    { tag: t.atom, color: 'inherit' },
+    { tag: t.number, color: 'inherit' },
+    { tag: t.definition(t.variableName), color: 'inherit' },
+    { tag: t.string, color: 'inherit' },
+    { tag: t.special(t.string), color: 'inherit' },
+    { tag: t.comment, color: 'inherit' },
+    { tag: t.variableName, color: 'inherit' },
+    { tag: t.tagName, color: 'inherit' },
+    { tag: t.bracket, color: 'inherit' },
+    { tag: t.meta, color: 'inherit' },
+    { tag: t.attributeName, color: 'inherit' },
+    { tag: t.propertyName, color: 'inherit' },
+    { tag: t.className, color: 'inherit' },
+    { tag: t.invalid, color: 'inherit' },
+    { tag: [t.unit, t.punctuation], color: 'inherit' },
   ],
 });
diff --git a/packages/codemirror/themes/teletext.mjs b/packages/codemirror/themes/teletext.mjs
index ddbf7b33..630329c1 100644
--- a/packages/codemirror/themes/teletext.mjs
+++ b/packages/codemirror/themes/teletext.mjs
@@ -17,7 +17,7 @@ export const settings = {
   lineBackground: '#00000040',
   gutterBackground: 'transparent',
   gutterForeground: '#8a919966',
-  customStyle: '.cm-line { line-height: 1 }',
+  // customStyle: '.cm-line { line-height: 1 }',
 };
 
 let punctuation = colorD;
diff --git a/packages/codemirror/themes/terminal.mjs b/packages/codemirror/themes/terminal.mjs
index 90c6e1d2..a5b4506f 100644
--- a/packages/codemirror/themes/terminal.mjs
+++ b/packages/codemirror/themes/terminal.mjs
@@ -14,24 +14,24 @@ export default createTheme({
   theme: 'dark',
   settings,
   styles: [
-    { tag: t.labelName, color: '#41FF00' },
-    { tag: t.keyword, color: '#41FF00' },
-    { tag: t.operator, color: '#41FF00' },
-    { tag: t.special(t.variableName), color: '#41FF00' },
-    { tag: t.typeName, color: '#41FF00' },
-    { tag: t.atom, color: '#41FF00' },
-    { tag: t.number, color: '#41FF00' },
-    { tag: t.definition(t.variableName), color: '#41FF00' },
-    { tag: t.string, color: '#41FF00' },
-    { tag: t.special(t.string), color: '#41FF00' },
-    { tag: t.comment, color: '#41FF00' },
-    { tag: t.variableName, color: '#41FF00' },
-    { tag: t.tagName, color: '#41FF00' },
-    { tag: t.bracket, color: '#41FF00' },
-    { tag: t.meta, color: '#41FF00' },
-    { tag: t.attributeName, color: '#41FF00' },
-    { tag: t.propertyName, color: '#41FF00' },
-    { tag: t.className, color: '#41FF00' },
-    { tag: t.invalid, color: '#41FF00' },
+    { tag: t.labelName, color: 'inherit' },
+    { tag: t.keyword, color: 'inherit' },
+    { tag: t.operator, color: 'inherit' },
+    { tag: t.special(t.variableName), color: 'inherit' },
+    { tag: t.typeName, color: 'inherit' },
+    { tag: t.atom, color: 'inherit' },
+    { tag: t.number, color: 'inherit' },
+    { tag: t.definition(t.variableName), color: 'inherit' },
+    { tag: t.string, color: 'inherit' },
+    { tag: t.special(t.string), color: 'inherit' },
+    { tag: t.comment, color: 'inherit' },
+    { tag: t.variableName, color: 'inherit' },
+    { tag: t.tagName, color: 'inherit' },
+    { tag: t.bracket, color: 'inherit' },
+    { tag: t.meta, color: 'inherit' },
+    { tag: t.attributeName, color: 'inherit' },
+    { tag: t.propertyName, color: 'inherit' },
+    { tag: t.className, color: 'inherit' },
+    { tag: t.invalid, color: 'inherit' },
   ],
 });
diff --git a/packages/codemirror/themes/whitescreen.mjs b/packages/codemirror/themes/whitescreen.mjs
index 5abbb1ea..ff860537 100644
--- a/packages/codemirror/themes/whitescreen.mjs
+++ b/packages/codemirror/themes/whitescreen.mjs
@@ -16,24 +16,24 @@ export default createTheme({
   theme: 'light',
   settings,
   styles: [
-    { tag: t.labelName, color: 'black' },
-    { tag: t.keyword, color: 'black' },
-    { tag: t.operator, color: 'black' },
-    { tag: t.special(t.variableName), color: 'black' },
-    { tag: t.typeName, color: 'black' },
-    { tag: t.atom, color: 'black' },
-    { tag: t.number, color: 'black' },
-    { tag: t.definition(t.variableName), color: 'black' },
-    { tag: t.string, color: 'black' },
-    { tag: t.special(t.string), color: 'black' },
-    { tag: t.comment, color: 'black' },
-    { tag: t.variableName, color: 'black' },
-    { tag: t.tagName, color: 'black' },
-    { tag: t.bracket, color: 'black' },
-    { tag: t.meta, color: 'black' },
-    { tag: t.attributeName, color: 'black' },
-    { tag: t.propertyName, color: 'black' },
-    { tag: t.className, color: 'black' },
-    { tag: t.invalid, color: 'black' },
+    { tag: t.labelName, color: 'inherit' },
+    { tag: t.keyword, color: 'inherit' },
+    { tag: t.operator, color: 'inherit' },
+    { tag: t.special(t.variableName), color: 'inherit' },
+    { tag: t.typeName, color: 'inherit' },
+    { tag: t.atom, color: 'inherit' },
+    { tag: t.number, color: 'inherit' },
+    { tag: t.definition(t.variableName), color: 'inherit' },
+    { tag: t.string, color: 'inherit' },
+    { tag: t.special(t.string), color: 'inherit' },
+    { tag: t.comment, color: 'inherit' },
+    { tag: t.variableName, color: 'inherit' },
+    { tag: t.tagName, color: 'inherit' },
+    { tag: t.bracket, color: 'inherit' },
+    { tag: t.meta, color: 'inherit' },
+    { tag: t.attributeName, color: 'inherit' },
+    { tag: t.propertyName, color: 'inherit' },
+    { tag: t.className, color: 'inherit' },
+    { tag: t.invalid, color: 'inherit' },
   ],
 });
diff --git a/packages/codemirror/widget.mjs b/packages/codemirror/widget.mjs
index 72b4ec65..42d3b151 100644
--- a/packages/codemirror/widget.mjs
+++ b/packages/codemirror/widget.mjs
@@ -133,3 +133,10 @@ registerWidget('_pitchwheel', (id, options = {}, pat) => {
   const ctx = getCanvasWidget(id, options).getContext('2d');
   return pat.pitchwheel({ ...options, ctx, id });
 });
+
+registerWidget('_spectrum', (id, options = {}, pat) => {
+  let _size = options.size || 200;
+  options = { width: _size, height: _size, ...options, size: _size / 5 };
+  const ctx = getCanvasWidget(id, options).getContext('2d');
+  return pat.spectrum({ ...options, ctx, id });
+});
diff --git a/packages/core/clockworker.js b/packages/core/clockworker.js
index 4c33de29..bcaf2872 100644
--- a/packages/core/clockworker.js
+++ b/packages/core/clockworker.js
@@ -4,9 +4,9 @@
 // import createClock from './zyklus.mjs';
 
 function getTime() {
-  const precision = 10 ** 4;
-  const seconds = performance.now() / 1000;
-  return Math.round(seconds * precision) / precision;
+  const seconds = performance.now() * 0.001;
+  return seconds;
+  // return Math.round(seconds * precision) / precision;
 }
 
 let num_cycles_at_cps_change = 0;
@@ -24,27 +24,20 @@ const sendMessage = (type, payload) => {
 
 const sendTick = (phase, duration, tick, time) => {
   const num_seconds_since_cps_change = num_ticks_since_cps_change * duration;
-
   const tickdeadline = phase - time;
   const lastTick = time + tickdeadline;
   const num_cycles_since_cps_change = num_seconds_since_cps_change * cps;
-
   const begin = num_cycles_at_cps_change + num_cycles_since_cps_change;
   const secondsSinceLastTick = time - lastTick - duration;
-
   const eventLength = duration * cps;
   const end = begin + eventLength;
-
   const cycle = begin + secondsSinceLastTick * cps;
 
   sendMessage('tick', {
     begin,
     end,
     cps,
-    tickdeadline,
-    num_cycles_at_cps_change,
-    num_seconds_at_cps_change,
-    num_seconds_since_cps_change,
+    time,
     cycle,
   });
   num_ticks_since_cps_change++;
diff --git a/packages/core/controls.mjs b/packages/core/controls.mjs
index d5dbef13..5a275294 100644
--- a/packages/core/controls.mjs
+++ b/packages/core/controls.mjs
@@ -191,7 +191,7 @@ export const { attack, att } = registerControl('attack', 'att');
  * note("c e g b g e")
  * .fm(4)
  * .fmh("<1 2 1.5 1.61>")
- * .scope()
+ * ._scope()
  *
  */
 export const { fmh } = registerControl(['fmh', 'fmi'], 'fmh');
@@ -205,7 +205,7 @@ export const { fmh } = registerControl(['fmh', 'fmi'], 'fmh');
  * @example
  * note("c e g b g e")
  * .fm("<0 1 2 8 32>")
- * .scope()
+ * ._scope()
  *
  */
 export const { fmi, fm } = registerControl(['fmi', 'fmh'], 'fm');
@@ -221,7 +221,7 @@ export const { fmi, fm } = registerControl(['fmi', 'fmh'], 'fm');
  * .fmdecay(.2)
  * .fmsustain(0)
  * .fmenv("")
- * .scope()
+ * ._scope()
  *
  */
 export const { fmenv } = registerControl('fmenv');
@@ -234,7 +234,7 @@ export const { fmenv } = registerControl('fmenv');
  * note("c e g b g e")
  * .fm(4)
  * .fmattack("<0 .05 .1 .2>")
- * .scope()
+ * ._scope()
  *
  */
 export const { fmattack } = registerControl('fmattack');
@@ -248,7 +248,7 @@ export const { fmattack } = registerControl('fmattack');
  * .fm(4)
  * .fmdecay("<.01 .05 .1 .2>")
  * .fmsustain(.4)
- * .scope()
+ * ._scope()
  *
  */
 export const { fmdecay } = registerControl('fmdecay');
@@ -262,7 +262,7 @@ export const { fmdecay } = registerControl('fmdecay');
  * .fm(4)
  * .fmdecay(.1)
  * .fmsustain("<1 .75 .5 0>")
- * .scope()
+ * ._scope()
  *
  */
 export const { fmsustain } = registerControl('fmsustain');
@@ -392,7 +392,7 @@ export const { loop } = registerControl('loop');
  * @synonyms loopb
  * @example
  * s("space").loop(1)
- * .loopBegin("<0 .125 .25>").scope()
+ * .loopBegin("<0 .125 .25>")._scope()
  */
 export const { loopBegin, loopb } = registerControl('loopBegin', 'loopb');
 /**
@@ -405,7 +405,7 @@ export const { loopBegin, loopb } = registerControl('loopBegin', 'loopb');
  * @synonyms loope
  * @example
  * s("space").loop(1)
- * .loopEnd("<1 .75 .5 .25>").scope()
+ * .loopEnd("<1 .75 .5 .25>")._scope()
  */
 export const { loopEnd, loope } = registerControl('loopEnd', 'loope');
 /**
@@ -430,6 +430,17 @@ export const { crush } = registerControl('crush');
  */
 export const { coarse } = registerControl('coarse');
 
+/**
+ * filter overdrive for supported filter types
+ *
+ * @name drive
+ * @param {number | Pattern} amount
+ * @example
+ * note("{f g g c d a a#}%16".sub(17)).s("supersaw").lpenv(8).lpf(150).lpq(.8).ftype('ladder').drive("<.5 4>")
+ *
+ */
+export const { drive } = registerControl('drive');
+
 /**
  * Allows you to set the output channels on the interface
  *
@@ -443,9 +454,6 @@ export const { coarse } = registerControl('coarse');
  */
 export const { channels, ch } = registerControl('channels', 'ch');
 
-// superdirt only
-export const { phaserrate, phasr } = registerControl('phaserrate', 'phasr');
-
 /**
  * Phaser audio effect that approximates popular guitar pedals.
  *
@@ -457,7 +465,11 @@ export const { phaserrate, phasr } = registerControl('phaserrate', 'phasr');
  * .phaser("<1 2 4 8>")
  *
  */
-export const { phaser, ph } = registerControl(['phaser', 'phaserdepth', 'phasercenter', 'phasersweep'], 'ph');
+export const { phaserrate, ph, phaser } = registerControl(
+  ['phaserrate', 'phaserdepth', 'phasercenter', 'phasersweep'],
+  'ph',
+  'phaser',
+);
 
 /**
  * The frequency sweep range of the lfo for the phaser effect. Defaults to 2000
@@ -542,7 +554,7 @@ export const { cutoff, ctf, lpf, lp } = registerControl(['cutoff', 'resonance',
  * @example
  * note("c2 e2 f2 g2")
  * .sound('sawtooth')
- * .lpf(500)
+ * .lpf(300)
  * .lpa(.5)
  * .lpenv("<4 2 1 0 -1 -2 -4>/4")
  */
@@ -581,7 +593,7 @@ export const { bpenv, bpe } = registerControl('bpenv', 'bpe');
  * @example
  * note("c2 e2 f2 g2")
  * .sound('sawtooth')
- * .lpf(500)
+ * .lpf(300)
  * .lpa("<.5 .25 .1 .01>/4")
  * .lpenv(4)
  */
@@ -620,9 +632,8 @@ export const { bpattack, bpa } = registerControl('bpattack', 'bpa');
  * @example
  * note("c2 e2 f2 g2")
  * .sound('sawtooth')
- * .lpf(500)
+ * .lpf(300)
  * .lpd("<.5 .25 .1 0>/4")
- * .lps(0.2)
  * .lpenv(4)
  */
 export const { lpdecay, lpd } = registerControl('lpdecay', 'lpd');
@@ -662,7 +673,7 @@ export const { bpdecay, bpd } = registerControl('bpdecay', 'bpd');
  * @example
  * note("c2 e2 f2 g2")
  * .sound('sawtooth')
- * .lpf(500)
+ * .lpf(300)
  * .lpd(.5)
  * .lps("<0 .25 .5 1>/4")
  * .lpenv(4)
@@ -705,7 +716,7 @@ export const { bpsustain, bps } = registerControl('bpsustain', 'bps');
  * note("c2 e2 f2 g2")
  * .sound('sawtooth')
  * .clip(.5)
- * .lpf(500)
+ * .lpf(300)
  * .lpenv(4)
  * .lpr("<.5 .25 .1 0>/4")
  * .release(.5)
@@ -742,17 +753,28 @@ export const { hprelease, hpr } = registerControl('hprelease', 'hpr');
  */
 export const { bprelease, bpr } = registerControl('bprelease', 'bpr');
 /**
- * Sets the filter type. The 24db filter is more aggressive. More types might be added in the future.
+ * Sets the filter type. The ladder filter is more aggressive. More types might be added in the future.
  * @name ftype
- * @param {number | Pattern} type 12db (default) or 24db
+ * @param {number | Pattern} type 12db (0), ladder (1), or 24db (2)
  * @example
- * note("c2 e2 f2 g2")
+ * note("{f g g c d a a#}%8").s("sawtooth").lpenv(4).lpf(500).ftype("<0 1 2>").lpq(1)
+ * @example
+ * note("c f g g a c d4").fast(2)
  * .sound('sawtooth')
- * .lpf(500)
- * .bpenv(4)
- * .ftype("12db 24db")
+ * .lpf(200).fanchor(0)
+ * .lpenv(3).lpq(1)
+ * .ftype("")
  */
 export const { ftype } = registerControl('ftype');
+
+/**
+ * controls the center of the filter envelope. 0 is unipolar positive, .5 is bipolar, 1 is unipolar negative
+ * @name fanchor
+ * @param {number | Pattern} center 0 to 1
+ * @example
+ * note("{f g g c d a a#}%8").s("sawtooth").lpf("{1000}%2")
+ * .lpenv(8).fanchor("<0 .5 1>")
+ */
 export const { fanchor } = registerControl('fanchor');
 /**
  * Applies the cutoff frequency of the **h**igh-**p**ass **f**ilter.
@@ -779,10 +801,12 @@ export const { fanchor } = registerControl('fanchor');
  * @example
  * note("a e")
  * .vib("<.5 1 2 4 8 16>")
+ * ._scope()
  * @example
  * // change the modulation depth with ":"
  * note("a e")
  * .vib("<.5 1 2 4 8 16>:12")
+ * ._scope()
  */
 export const { vib, vibrato, v } = registerControl(['vib', 'vibmod'], 'vibrato', 'v');
 /**
@@ -803,10 +827,12 @@ export const { noise } = registerControl('noise');
  * @example
  * note("a e").vib(4)
  * .vibmod("<.25 .5 1 2 12>")
+ * ._scope()
  * @example
  * // change the vibrato frequency with ":"
  * note("a e")
  * .vibmod("<.25 .5 1 2 12>:8")
+ * ._scope()
  */
 export const { vibmod, vmod } = registerControl(['vibmod', 'vib'], 'vmod');
 export const { hcutoff, hpf, hp } = registerControl(['hcutoff', 'hresonance', 'hpenv'], 'hpf', 'hp');
@@ -1358,6 +1384,17 @@ export const { compressorRelease } = registerControl('compressorRelease');
  *
  */
 export const { speed } = registerControl('speed');
+
+/**
+ * Changes the speed of sample playback, i.e. a cheap way of changing pitch.
+ *
+ * @name stretch
+ * @param {number | Pattern} factor -inf to inf, negative numbers play the sample backwards.
+ * @example
+ * s("gm_flute").stretch("1 2 .5")
+ *
+ */
+export const { stretch } = registerControl('stretch');
 /**
  * Used in conjunction with `speed`, accepts values of "r" (rate, default behavior), "c" (cycles), or "s" (seconds). Using `unit "c"` means `speed` will be interpreted in units of cycles, e.g. `speed "1"` means samples will be stretched to fill a cycle. Using `unit "s"` means the playback speed will be adjusted so that the duration is the number of seconds specified by `speed`.
  *
@@ -1368,6 +1405,7 @@ export const { speed } = registerControl('speed');
  * @superdirtOnly
  *
  */
+
 export const { unit } = registerControl('unit');
 /**
  * Made by Calum Gunn. Reminiscent of some weird mixture of filter, ring-modulator and pitch-shifter. The SuperCollider manual defines Squiz as:
diff --git a/packages/core/cyclist.mjs b/packages/core/cyclist.mjs
index 08b89375..bd2db122 100644
--- a/packages/core/cyclist.mjs
+++ b/packages/core/cyclist.mjs
@@ -8,8 +8,19 @@ import createClock from './zyklus.mjs';
 import { logger } from './logger.mjs';
 
 export class Cyclist {
-  constructor({ interval, onTrigger, onToggle, onError, getTime, latency = 0.1, setInterval, clearInterval }) {
+  constructor({
+    interval,
+    onTrigger,
+    onToggle,
+    onError,
+    getTime,
+    latency = 0.1,
+    setInterval,
+    clearInterval,
+    beforeStart,
+  }) {
     this.started = false;
+    this.beforeStart = beforeStart;
     this.cps = 0.5;
     this.num_ticks_since_cps_change = 0;
     this.lastTick = 0; // absolute time when last tick (clock callback) happened
@@ -57,6 +68,10 @@ export class Cyclist {
               // see https://github.com/tidalcycles/strudel/pull/1004
               const deadline = targetTime - phase;
               onTrigger?.(hap, deadline, duration, this.cps, targetTime);
+              if (hap.value.cps !== undefined && this.cps != hap.value.cps) {
+                this.cps = hap.value.cps;
+                this.num_ticks_since_cps_change = 0;
+              }
             }
           });
         } catch (e) {
@@ -82,7 +97,8 @@ export class Cyclist {
     this.started = v;
     this.onToggle?.(v);
   }
-  start() {
+  async start() {
+    await this.beforeStart?.();
     this.num_ticks_since_cps_change = 0;
     this.num_cycles_at_cps_change = 0;
     if (!this.pattern) {
@@ -103,10 +119,10 @@ export class Cyclist {
     this.lastEnd = 0;
     this.setStarted(false);
   }
-  setPattern(pat, autostart = false) {
+  async setPattern(pat, autostart = false) {
     this.pattern = pat;
     if (autostart && !this.started) {
-      this.start();
+      await this.start();
     }
   }
   setCps(cps = 0.5) {
diff --git a/packages/core/evaluate.mjs b/packages/core/evaluate.mjs
index ea63d8df..e3e73d59 100644
--- a/packages/core/evaluate.mjs
+++ b/packages/core/evaluate.mjs
@@ -4,8 +4,6 @@ Copyright (C) 2022 Strudel contributors - see .
 */
 
-import { isPattern } from './index.mjs';
-
 export const evalScope = async (...args) => {
   const results = await Promise.allSettled(args);
   const modules = results.filter((result) => result.status === 'fulfilled').map((r) => r.value);
@@ -37,11 +35,12 @@ function safeEval(str, options = {}) {
   return Function(body)();
 }
 
-export const evaluate = async (code, transpiler) => {
+export const evaluate = async (code, transpiler, transpilerOptions) => {
   let meta = {};
+
   if (transpiler) {
     // transform syntactically correct js code to semantically usable code
-    const transpiled = transpiler(code);
+    const transpiled = transpiler(code, transpilerOptions);
     code = transpiled.output;
     meta = transpiled;
   }
diff --git a/packages/core/fraction.mjs b/packages/core/fraction.mjs
index a339567f..dc7fe27a 100644
--- a/packages/core/fraction.mjs
+++ b/packages/core/fraction.mjs
@@ -119,10 +119,10 @@ export const lcm = (...fractions) => {
   if (fractions.length === 0) {
     return undefined;
   }
-
+  const x = fractions.pop();
   return fractions.reduce(
     (lcm, fraction) => (lcm === undefined || fraction === undefined ? undefined : lcm.lcm(fraction)),
-    fraction(1),
+    x,
   );
 };
 
diff --git a/packages/core/index.mjs b/packages/core/index.mjs
index 506fa77a..a10b68b0 100644
--- a/packages/core/index.mjs
+++ b/packages/core/index.mjs
@@ -14,6 +14,7 @@ export * from './controls.mjs';
 export * from './hap.mjs';
 export * from './pattern.mjs';
 export * from './signal.mjs';
+export * from './pick.mjs';
 export * from './state.mjs';
 export * from './timespan.mjs';
 export * from './util.mjs';
diff --git a/packages/core/neocyclist.mjs b/packages/core/neocyclist.mjs
index 4600d0ef..ad22cf00 100644
--- a/packages/core/neocyclist.mjs
+++ b/packages/core/neocyclist.mjs
@@ -5,6 +5,7 @@ This program is free software: you can redistribute it and/or modify it under th
 */
 
 import { logger } from './logger.mjs';
+import { ClockCollator, cycleToSeconds } from './util.mjs';
 
 export class NeoCyclist {
   constructor({ onTrigger, onToggle, getTime }) {
@@ -13,79 +14,38 @@ export class NeoCyclist {
     this.lastTick = 0; // absolute time when last tick (clock callback) happened
     this.getTime = getTime; // get absolute time
     this.time_at_last_tick_message = 0;
-
-    this.num_cycles_at_cps_change = 0;
+    // the clock of the worker and the audio context clock can drift apart over time
+    // aditionally, the message time of the worker pinging the callback to process haps can be inconsistent.
+    // we need to keep a rolling average of the time difference between the worker clock and audio context clock
+    // in order to schedule events consistently.
+    this.collator = new ClockCollator({ getTargetClockTime: getTime });
     this.onToggle = onToggle;
     this.latency = 0.1; // fixed trigger time offset
     this.cycle = 0;
     this.id = Math.round(Date.now() * Math.random());
-    this.worker_time_dif;
     this.worker = new SharedWorker(new URL('./clockworker.js', import.meta.url));
     this.worker.port.start();
-
     this.channel = new BroadcastChannel('strudeltick');
-    let weight = 0; // the amount of weight that is applied to the current average when averaging a new time dif
-    const maxWeight = 20;
-    const precision = 10 ** 3; //round off time diff to prevent accumulating outliers
-
-    // the clock of the worker and the audio context clock can drift apart over time
-    // aditionally, the message time of the worker pinging the callback to process haps can be inconsistent.
-    // we need to keep a rolling weighted average of the time difference between the worker clock and audio context clock
-    // in order to schedule events consistently.
-    const setTimeReference = (num_seconds_at_cps_change, num_seconds_since_cps_change, tickdeadline) => {
-      const time_dif = getTime() - (num_seconds_at_cps_change + num_seconds_since_cps_change) + tickdeadline;
-      if (this.worker_time_dif == null) {
-        this.worker_time_dif = time_dif;
-      } else {
-        const w = 1; //weight of new time diff;
-        const new_dif =
-          Math.round(((this.worker_time_dif * weight + time_dif * w) / (weight + w)) * precision) / precision;
-
-        if (new_dif != this.worker_time_dif) {
-          // reset the weight so the clock recovers faster from an audio context freeze/dropout if it happens
-          weight = 4;
-        }
-        this.worker_time_dif = new_dif;
-      }
-      weight = Math.min(weight + 1, maxWeight);
-    };
-
     const tickCallback = (payload) => {
-      const {
-        num_cycles_at_cps_change,
-        cps,
-        num_seconds_at_cps_change,
-        num_seconds_since_cps_change,
-        begin,
-        end,
-        tickdeadline,
-        cycle,
-      } = payload;
+      const { cps, begin, end, cycle, time } = payload;
       this.cps = cps;
       this.cycle = cycle;
-
-      setTimeReference(num_seconds_at_cps_change, num_seconds_since_cps_change, tickdeadline);
-
-      processHaps(begin, end, num_cycles_at_cps_change, num_seconds_at_cps_change);
-
-      this.time_at_last_tick_message = this.getTime();
+      const currentTime = this.collator.calculateOffset(time) + time;
+      processHaps(begin, end, currentTime);
+      this.time_at_last_tick_message = currentTime;
     };
 
-    const processHaps = (begin, end, num_cycles_at_cps_change, seconds_at_cps_change) => {
+    const processHaps = (begin, end, currentTime) => {
       if (this.started === false) {
         return;
       }
 
       const haps = this.pattern.queryArc(begin, end, { _cps: this.cps });
-
       haps.forEach((hap) => {
         if (hap.hasOnset()) {
-          const targetTime =
-            (hap.whole.begin - num_cycles_at_cps_change) / this.cps +
-            seconds_at_cps_change +
-            this.latency +
-            this.worker_time_dif;
-          const duration = hap.duration / this.cps;
+          const timeUntilTrigger = cycleToSeconds(hap.whole.begin - this.cycle, this.cps);
+          const targetTime = timeUntilTrigger + currentTime + this.latency;
+          const duration = cycleToSeconds(hap.duration, this.cps);
           onTrigger?.(hap, 0, duration, this.cps, targetTime);
         }
       });
@@ -129,8 +89,8 @@ export class NeoCyclist {
     this.setStarted(true);
   }
   stop() {
-    this.worker_time_dif = null;
     logger('[cyclist] stop');
+    this.collator.reset();
     this.setStarted(false);
   }
   setPattern(pat, autostart = false) {
diff --git a/packages/core/package.json b/packages/core/package.json
index 6c95d049..20356d39 100644
--- a/packages/core/package.json
+++ b/packages/core/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@strudel/core",
-  "version": "1.0.1",
+  "version": "1.1.0",
   "description": "Port of Tidal Cycles to JavaScript",
   "main": "index.mjs",
   "type": "module",
@@ -36,6 +36,6 @@
   "gitHead": "0e26d4e741500f5bae35b023608f062a794905c2",
   "devDependencies": {
     "vite": "^5.0.10",
-    "vitest": "^1.1.0"
+    "vitest": "^2.1.3"
   }
 }
diff --git a/packages/core/pattern.mjs b/packages/core/pattern.mjs
index 03ce2e2d..f3f19f87 100644
--- a/packages/core/pattern.mjs
+++ b/packages/core/pattern.mjs
@@ -94,6 +94,14 @@ export class Pattern {
     return result;
   }
 
+  // runs func on query state
+  withState(func) {
+    return this.withHaps((haps, state) => {
+      func(state);
+      return haps;
+    });
+  }
+
   /**
    * see `withValue`
    * @noAutocomplete
@@ -378,6 +386,15 @@ export class Pattern {
     return this.fmap(func).squeezeJoin();
   }
 
+  polyJoin = function () {
+    const pp = this;
+    return pp.fmap((p) => p.s_extend(pp.tactus.div(p.tactus))).outerJoin();
+  };
+
+  polyBind(func) {
+    return this.fmap(func).polyJoin();
+  }
+
   //////////////////////////////////////////////////////////////////////
   // Utility methods mainly for internal use
 
@@ -746,6 +763,10 @@ export class Pattern {
     const otherPat = reify(other);
     return otherPat.fmap((b) => this.fmap((a) => func(a)(b))).restartJoin();
   }
+  _opPoly(other, func) {
+    const otherPat = reify(other);
+    return this.fmap((b) => otherPat.fmap((a) => func(a)(b))).polyJoin();
+  }
 
   //////////////////////////////////////////////////////////////////////
   // End-user methods.
@@ -788,15 +809,6 @@ export class Pattern {
   //////////////////////////////////////////////////////////////////////
   // Multi-pattern functions
 
-  /**
-   * Stacks the given pattern(s) to the current pattern.
-   * @name stack
-   * @memberof Pattern
-   * @example
-   * s("hh*4").stack(
-   *   note("c4(5,8)")
-   * )
-   */
   stack(...pats) {
     return stack(this, ...pats);
   }
@@ -805,30 +817,9 @@ export class Pattern {
     return sequence(this, ...pats);
   }
 
-  /**
-   * Appends the given pattern(s) to the current pattern.
-   * @name seq
-   * @memberof Pattern
-   * @synonyms sequence, fastcat
-   * @example
-   * s("hh*4").seq(
-   *   note("c4(5,8)")
-   * )
-   */
   seq(...pats) {
     return sequence(this, ...pats);
   }
-
-  /**
-   * Appends the given pattern(s) to the next cycle.
-   * @name cat
-   * @memberof Pattern
-   * @synonyms slowcat
-   * @example
-   * s("hh*4").cat(
-   *   note("c4(5,8)")
-   * )
-   */
   cat(...pats) {
     return cat(this, ...pats);
   }
@@ -1054,7 +1045,7 @@ function _composeOp(a, b, func) {
     func: [(a, b) => b(a)],
   };
 
-  const hows = ['In', 'Out', 'Mix', 'Squeeze', 'SqueezeOut', 'Reset', 'Restart'];
+  const hows = ['In', 'Out', 'Mix', 'Squeeze', 'SqueezeOut', 'Reset', 'Restart', 'Poly'];
 
   // generate methods to do what and how
   for (const [what, [op, preprocess]] of Object.entries(composers)) {
@@ -1259,6 +1250,12 @@ export function reify(thing) {
  * @example
  * stack("g3", "b3", ["e4", "d4"]).note()
  * // "g3,b3,[e4,d4]".note()
+ *
+ * @example
+ * // As a chained function:
+ * s("hh*4").stack(
+ *   note("c4(5,8)")
+ * )
  */
 export function stack(...pats) {
   // Array test here is to avoid infinite recursions..
@@ -1387,6 +1384,11 @@ export function slowcatPrime(...pats) {
  * cat("e5", "b4", ["d5", "c5"]).note()
  * // "".note()
  *
+ * @example
+ * // As a chained function:
+ * s("hh*4").cat(
+ *    note("c4(5,8)")
+ * )
  */
 export function cat(...pats) {
   return slowcat(...pats);
@@ -1409,12 +1411,45 @@ export function arrange(...sections) {
   return s_cat(...sections).slow(total);
 }
 
+/**
+ * Similarly to `arrange`, allows you to arrange multiple patterns together over multiple cycles.
+ * Unlike `arrange`, you specify a start and stop time for each pattern rather than duration, which
+ * means that patterns can overlap.
+ * @return {Pattern}
+ * @example
+seqPLoop([0, 2, "bd(3,8)"],
+         [1, 3, "cp(3,8)"]
+        )
+  .sound()
+ */
+export function seqPLoop(...parts) {
+  let total = Fraction(0);
+  const pats = [];
+  for (let part of parts) {
+    if (part.length == 2) {
+      part.unshift(total);
+    }
+    total = part[1];
+  }
+
+  return stack(
+    ...parts.map(([start, stop, pat]) =>
+      pure(reify(pat)).compress(Fraction(start).div(total), Fraction(stop).div(total)),
+    ),
+  )
+    .slow(total)
+    .innerJoin(); // or resetJoin or restartJoin ??
+}
+
 export function fastcat(...pats) {
   let result = slowcat(...pats);
   if (pats.length > 1) {
     result = result._fast(pats.length);
     result.tactus = pats.length;
   }
+  if (pats.length == 1 && pats[0].__tactus_source) {
+    pats.tactus = pats[0].tactus;
+  }
   return result;
 }
 
@@ -1424,12 +1459,18 @@ export function sequence(...pats) {
 }
 
 /** Like **cat**, but the items are crammed into one cycle.
- * @synonyms fastcat, sequence
+ * @synonyms sequence, fastcat
  * @example
  * seq("e5", "b4", ["d5", "c5"]).note()
  * // "e5 b4 [d5 c5]".note()
  *
+ * @example
+ * // As a chained function:
+ * s("hh*4").seq(
+ *   note("c4(5,8)")
+ * )
  */
+
 export function seq(...pats) {
   return fastcat(...pats);
 }
@@ -1558,7 +1599,11 @@ export function register(name, func, patternify = true, preserveTactus = false,
     // There are patternified args, so lets make an unpatternified
     // version, prefixed by '_'
     Pattern.prototype['_' + name] = function (...args) {
-      return func(...args, this);
+      const result = func(...args, this);
+      if (preserveTactus) {
+        result.setTactus(this.tactus);
+      }
+      return result;
     };
   }
 
@@ -1988,6 +2033,34 @@ export const { zoomArc, zoomarc } = register(['zoomArc', 'zoomarc'], function (a
   return pat.zoom(a.begin, a.end);
 });
 
+/**
+ * Splits a pattern into the given number of slices, and plays them according to a pattern of slice numbers.
+ * Similar to `slice`, but slices up patterns rather than sound samples.
+ * @param {number} number of slices
+ * @param {number} slices to play
+ * @example
+ * note("0 1 2 3 4 5 6 7".scale('c:mixolydian'))
+ *.bite(4, "3 2 1 0")
+ * @example
+ * sound("bd - bd bd*2, - sd:6 - sd:5 sd:1 - [- sd:2] -, hh [- cp:7]")
+  .bank("RolandTR909").speed(1.2)
+  .bite(4, "0 0 [1 2] <3 2> 0 0 [2 1] 3")
+ */
+export const bite = register(
+  'bite',
+  (npat, ipat, pat) => {
+    return ipat
+      .fmap((i) => (n) => {
+        const a = Fraction(i).div(n).mod(1);
+        const b = a.add(Fraction(1).div(n));
+        return pat.zoom(a, b);
+      })
+      .appLeft(npat)
+      .squeezeJoin();
+  },
+  false,
+);
+
 /**
  * Selects the given fraction of the pattern and repeats that part to fill the remainder of the cycle.
  * @param {number} fraction fraction to select
@@ -2419,6 +2492,37 @@ Pattern.prototype.tag = function (tag) {
   return this.withContext((ctx) => ({ ...ctx, tags: (ctx.tags || []).concat([tag]) }));
 };
 
+/**
+ * Filters haps using the given function
+ * @name filter
+ * @param {Function} test function to test Hap
+ * @example
+ * s("hh!7 oh").filter(hap => hap.value.s==='hh')
+ */
+export const filter = register('filter', (test, pat) => pat.withHaps((haps) => haps.filter(test)));
+
+/**
+ * Filters haps by their begin time
+ * @name filterWhen
+ * @noAutocomplete
+ * @param {Function} test function to test Hap.whole.begin
+ */
+export const filterWhen = register('filterWhen', (test, pat) => pat.filter((h) => test(h.whole.begin)));
+
+/**
+ * Use within to apply a function to only a part of a pattern.
+ * @name within
+ * @param {number} start start within cycle (0 - 1)
+ * @param {number} end end within cycle (0 - 1). Must be > start
+ * @param {Function} func function to be applied to the sub-pattern
+ */
+export const within = register('within', (a, b, fn, pat) =>
+  stack(
+    fn(pat.filterWhen((t) => t.cyclePos() >= a && t.cyclePos() <= b)),
+    pat.filterWhen((t) => t.cyclePos() < a || t.cyclePos() > b),
+  ),
+);
+
 //////////////////////////////////////////////////////////////////////
 // Tactus-related functions, i.e. ones that do stepwise
 // transformations
@@ -2489,7 +2593,7 @@ export const steps = register('steps', function (targetTactus, pat) {
     // avoid divide by zero..
     return nothing;
   }
-  return pat.fast(Fraction(targetTactus).div(pat.tactus));
+  return pat._fast(Fraction(targetTactus).div(pat.tactus)).setTactus(targetTactus);
 });
 
 export function _polymeterListSteps(steps, ...args) {
@@ -2523,7 +2627,7 @@ export function _polymeterListSteps(steps, ...args) {
  * @param  {any[]} patterns one or more patterns
  * @example
  * // the same as "{c d, e f g}%4"
- * s_polymeterSteps(4, "c d", "e f g")
+ * s_polymeterSteps(4, "c d", "e f g").note()
  */
 export function s_polymeterSteps(steps, ...args) {
   if (args.length == 0) {
@@ -2541,8 +2645,8 @@ export function s_polymeterSteps(steps, ...args) {
  * *EXPERIMENTAL* - Combines the given lists of patterns with the same pulse, creating polymeters when different sized sequences are used.
  * @synonyms pm
  * @example
- * // The same as "{c eb g, c2 g2}"
- * s_polymeter("c eb g", "c2 g2")
+ * // The same as note("{c eb g, c2 g2}")
+ * s_polymeter("c eb g", "c2 g2").note()
  *
  */
 export function s_polymeter(...args) {
@@ -2571,6 +2675,8 @@ export function s_polymeter(...args) {
 /** Sequences patterns like `seq`, but each pattern has a length, relative to the whole.
  * This length can either be provided as a [length, pattern] pair, or inferred from
  * the pattern's 'tactus', generally inferred by the mininotation. Has the alias `timecat`.
+ * @name s_cat
+ * @synonyms timeCat, timecat
  * @return {Pattern}
  * @example
  * s_cat([3,"e3"],[1, "g3"]).note()
@@ -2602,8 +2708,7 @@ export function s_cat(...timepats) {
   }
   if (timepats.length == 1) {
     const result = reify(timepats[0][1]);
-    result.tactus = timepats[0][0];
-    return result;
+    return result.withTactus((_) => timepats[0][0]);
   }
 
   const total = timepats.map((a) => a[0]).reduce((a, b) => a.add(b), Fraction(0));
@@ -2696,6 +2801,10 @@ export const s_sub = stepRegister('s_sub', function (i, pat) {
   return pat.s_add(pat.tactus.sub(i));
 });
 
+export const s_extend = stepRegister('s_extend', function (factor, pat) {
+  return pat.fast(factor).s_expand(factor);
+});
+
 export const s_expand = stepRegister('s_expand', function (factor, pat) {
   return pat.withTactus((t) => t.mul(Fraction(factor)));
 });
@@ -2773,6 +2882,13 @@ export const s_tour = function (pat, ...many) {
   return pat.s_tour(...many);
 };
 
+const s_zip = function (...pats) {
+  pats = pats.filter((pat) => pat.hasTactus);
+  const zipped = slowcat(...pats.map((pat) => pat._slow(pat.tactus)));
+  // Should maybe use lcm or gcd for tactus?
+  return zipped._fast(pats[0].tactus).setTactus(pats[0].tactus);
+};
+
 //////////////////////////////////////////////////////////////////////
 // Control-related functions, i.e. ones that manipulate patterns of
 // objects
@@ -2794,8 +2910,16 @@ export const s_tour = function (pat, ...many) {
 export const chop = register('chop', function (n, pat) {
   const slices = Array.from({ length: n }, (x, i) => i);
   const slice_objects = slices.map((i) => ({ begin: i / n, end: (i + 1) / n }));
+  const merge = function (a, b) {
+    if ('begin' in a && 'end' in a && a.begin !== undefined && a.end !== undefined) {
+      const d = a.end - a.begin;
+      b = { begin: a.begin + b.begin * d, end: a.begin + b.end * d };
+    }
+    // return a;
+    return Object.assign({}, a, b);
+  };
   const func = function (o) {
-    return sequence(slice_objects.map((slice_o) => Object.assign({}, o, slice_o)));
+    return sequence(slice_objects.map((slice_o) => merge(o, slice_o)));
   };
   return pat.squeezeBind(func).setTactus(__tactus ? Fraction(n).mulmaybe(pat.tactus) : undefined);
 });
@@ -2901,7 +3025,8 @@ export const splice = register(
 );
 
 export const { loopAt, loopat } = register(['loopAt', 'loopat'], function (factor, pat) {
-  return new Pattern((state) => _loopAt(factor, pat, state.controls._cps).query(state));
+  const tactus = pat.tactus ? pat.tactus.div(factor) : undefined;
+  return new Pattern((state) => _loopAt(factor, pat, state.controls._cps).query(state), tactus);
 });
 
 /**
@@ -2915,11 +3040,14 @@ export const { loopAt, loopat } = register(['loopAt', 'loopat'], function (facto
 export const fit = register('fit', (pat) =>
   pat.withHaps((haps, state) =>
     haps.map((hap) =>
-      hap.withValue((v) => ({
-        ...v,
-        speed: (state.controls._cps || 1) / hap.whole.duration,
-        unit: 'c',
-      })),
+      hap.withValue((v) => {
+        const slicedur = ('end' in v ? v.end : 1) - ('begin' in v ? v.begin : 0);
+        return {
+          ...v,
+          speed: ((state.controls._cps || 1) / hap.whole.duration) * slicedur,
+          unit: 'c',
+        };
+      }),
     ),
   ),
 );
diff --git a/packages/core/pick.mjs b/packages/core/pick.mjs
new file mode 100644
index 00000000..334551e1
--- /dev/null
+++ b/packages/core/pick.mjs
@@ -0,0 +1,214 @@
+/*
+pick.mjs - methods that use one pattern to pick events from other patterns.
+Copyright (C) 2024 Strudel contributors - see 
+This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program.  If not, see .
+*/
+
+import { Pattern, reify, silence, register } from './pattern.mjs';
+
+import { _mod, clamp, objectMap } from './util.mjs';
+
+const _pick = function (lookup, pat, modulo = true) {
+  const array = Array.isArray(lookup);
+  const len = Object.keys(lookup).length;
+
+  lookup = objectMap(lookup, reify);
+
+  if (len === 0) {
+    return silence;
+  }
+  return pat.fmap((i) => {
+    let key = i;
+    if (array) {
+      key = modulo ? Math.round(key) % len : clamp(Math.round(key), 0, lookup.length - 1);
+    }
+    return lookup[key];
+  });
+};
+
+/** * Picks patterns (or plain values) either from a list (by index) or a lookup table (by name).
+ * Similar to `inhabit`, but maintains the structure of the original patterns.
+ * @param {Pattern} pat
+ * @param {*} xs
+ * @returns {Pattern}
+ * @example
+ * note("<0 1 2!2 3>".pick(["g a", "e f", "f g f g" , "g c d"]))
+ * @example
+ * sound("<0 1 [2,0]>".pick(["bd sd", "cp cp", "hh hh"]))
+ * @example
+ * sound("<0!2 [0,1] 1>".pick(["bd(3,8)", "sd sd"]))
+ * @example
+ * s("".pick({a: "bd(3,8)", b: "sd sd"}))
+ */
+
+export const pick = function (lookup, pat) {
+  // backward compatibility - the args used to be flipped
+  if (Array.isArray(pat)) {
+    [pat, lookup] = [lookup, pat];
+  }
+  return __pick(lookup, pat);
+};
+
+const __pick = register('pick', function (lookup, pat) {
+  return _pick(lookup, pat, false).innerJoin();
+});
+
+/** * The same as `pick`, but if you pick a number greater than the size of the list,
+ * it wraps around, rather than sticking at the maximum value.
+ * For example, if you pick the fifth pattern of a list of three, you'll get the
+ * second one.
+ * @param {Pattern} pat
+ * @param {*} xs
+ * @returns {Pattern}
+ */
+
+export const pickmod = register('pickmod', function (lookup, pat) {
+  return _pick(lookup, pat, true).innerJoin();
+});
+
+/** * pickF lets you use a pattern of numbers to pick which function to apply to another pattern.
+ * @param {Pattern} pat
+ * @param {Pattern} lookup a pattern of indices
+ * @param {function[]} funcs the array of functions from which to pull
+ * @returns {Pattern}
+ * @example
+ * s("bd [rim hh]").pickF("<0 1 2>", [rev,jux(rev),fast(2)])
+ * @example
+ * note("(3,8)").s("square")
+ *     .pickF("<0 2> 1", [jux(rev),fast(2),x=>x.lpf(800)])
+ */
+export const pickF = register('pickF', function (lookup, funcs, pat) {
+  return pat.apply(pick(lookup, funcs));
+});
+
+/** * The same as `pickF`, but if you pick a number greater than the size of the functions list,
+ * it wraps around, rather than sticking at the maximum value.
+ * @param {Pattern} pat
+ * @param {Pattern} lookup a pattern of indices
+ * @param {function[]} funcs the array of functions from which to pull
+ * @returns {Pattern}
+ */
+export const pickmodF = register('pickmodF', function (lookup, funcs, pat) {
+  return pat.apply(pickmod(lookup, funcs));
+});
+
+/** * Similar to `pick`, but it applies an outerJoin instead of an innerJoin.
+ * @param {Pattern} pat
+ * @param {*} xs
+ * @returns {Pattern}
+ */
+export const pickOut = register('pickOut', function (lookup, pat) {
+  return _pick(lookup, pat, false).outerJoin();
+});
+
+/** * The same as `pickOut`, but if you pick a number greater than the size of the list,
+ * it wraps around, rather than sticking at the maximum value.
+ * @param {Pattern} pat
+ * @param {*} xs
+ * @returns {Pattern}
+ */
+export const pickmodOut = register('pickmodOut', function (lookup, pat) {
+  return _pick(lookup, pat, true).outerJoin();
+});
+
+/** * Similar to `pick`, but the choosen pattern is restarted when its index is triggered.
+ * @param {Pattern} pat
+ * @param {*} xs
+ * @returns {Pattern}
+ */
+export const pickRestart = register('pickRestart', function (lookup, pat) {
+  return _pick(lookup, pat, false).restartJoin();
+});
+
+/** * The same as `pickRestart`, but if you pick a number greater than the size of the list,
+   * it wraps around, rather than sticking at the maximum value.
+   * @param {Pattern} pat
+   * @param {*} xs
+   * @returns {Pattern}
+   * @example
+   * "".pickRestart({
+        a: n("0 1 2 0"),
+        b: n("2 3 4 ~"),
+        c: n("[4 5] [4 3] 2 0"),
+        d: n("0 -3 0 ~")
+      }).scale("C:major").s("piano")
+   */
+export const pickmodRestart = register('pickmodRestart', function (lookup, pat) {
+  return _pick(lookup, pat, true).restartJoin();
+});
+
+/** * Similar to `pick`, but the choosen pattern is reset when its index is triggered.
+ * @param {Pattern} pat
+ * @param {*} xs
+ * @returns {Pattern}
+ */
+export const pickReset = register('pickReset', function (lookup, pat) {
+  return _pick(lookup, pat, false).resetJoin();
+});
+
+/** * The same as `pickReset`, but if you pick a number greater than the size of the list,
+ * it wraps around, rather than sticking at the maximum value.
+ * @param {Pattern} pat
+ * @param {*} xs
+ * @returns {Pattern}
+ */
+export const pickmodReset = register('pickmodReset', function (lookup, pat) {
+  return _pick(lookup, pat, true).resetJoin();
+});
+
+/**
+  /** * Picks patterns (or plain values) either from a list (by index) or a lookup table (by name).
+   * Similar to `pick`, but cycles are squeezed into the target ('inhabited') pattern.
+   * @name inhabit
+   * @synonyms pickSqueeze
+   * @param {Pattern} pat
+   * @param {*} xs
+   * @returns {Pattern}
+   * @example
+   * "".inhabit({a: s("bd(3,8)"),
+                            b: s("cp sd")
+                           })
+   * @example
+   * s("a@2 [a b] a".inhabit({a: "bd(3,8)", b: "sd sd"})).slow(4)
+   */
+export const { inhabit, pickSqueeze } = register(['inhabit', 'pickSqueeze'], function (lookup, pat) {
+  return _pick(lookup, pat, false).squeezeJoin();
+});
+
+/** * The same as `inhabit`, but if you pick a number greater than the size of the list,
+ * it wraps around, rather than sticking at the maximum value.
+ * For example, if you pick the fifth pattern of a list of three, you'll get the
+ * second one.
+ * @name inhabitmod
+ * @synonyms pickmodSqueeze
+ * @param {Pattern} pat
+ * @param {*} xs
+ * @returns {Pattern}
+ */
+
+export const { inhabitmod, pickmodSqueeze } = register(['inhabitmod', 'pickmodSqueeze'], function (lookup, pat) {
+  return _pick(lookup, pat, true).squeezeJoin();
+});
+
+/**
+ * Pick from the list of values (or patterns of values) via the index using the given
+ * pattern of integers. The selected pattern will be compressed to fit the duration of the selecting event
+ * @param {Pattern} pat
+ * @param {*} xs
+ * @returns {Pattern}
+ * @example
+ * note(squeeze("<0@2 [1!2] 2>", ["g a", "f g f g" , "g a c d"]))
+ */
+
+export const squeeze = (pat, xs) => {
+  xs = xs.map(reify);
+  if (xs.length == 0) {
+    return silence;
+  }
+  return pat
+    .fmap((i) => {
+      const key = _mod(Math.round(i), xs.length);
+      return xs[key];
+    })
+    .squeezeJoin();
+};
diff --git a/packages/core/repl.mjs b/packages/core/repl.mjs
index 5b7bcd71..eff0a16c 100644
--- a/packages/core/repl.mjs
+++ b/packages/core/repl.mjs
@@ -10,6 +10,7 @@ export function repl({
   defaultOutput,
   onEvalError,
   beforeEval,
+  beforeStart,
   afterEval,
   getTime,
   transpiler,
@@ -19,6 +20,7 @@ export function repl({
   sync = false,
   setInterval,
   clearInterval,
+  id,
 }) {
   const state = {
     schedulerError: undefined,
@@ -32,6 +34,10 @@ export function repl({
     started: false,
   };
 
+  const transpilerOptions = {
+    id,
+  };
+
   const updateState = (update) => {
     Object.assign(state, update);
     state.isDirty = state.code !== state.activeCode;
@@ -48,6 +54,7 @@ export function repl({
     },
     setInterval,
     clearInterval,
+    beforeStart,
   };
 
   // NeoCyclist uses a shared worker to communicate between instances, which is not supported on mobile chrome
@@ -64,9 +71,10 @@ export function repl({
     return silence;
   };
 
-  const setPattern = (pattern, autostart = true) => {
+  const setPattern = async (pattern, autostart = true) => {
     pattern = editPattern?.(pattern) || pattern;
-    scheduler.setPattern(pattern, autostart);
+    await scheduler.setPattern(pattern, autostart);
+    return pattern;
   };
   setTime(() => scheduler.now()); // TODO: refactor?
 
@@ -84,7 +92,7 @@ export function repl({
   // set pattern methods that use this repl via closure
   const injectPatternMethods = () => {
     Pattern.prototype.p = function (id) {
-      if (id.startsWith('_') || id.endsWith('_')) {
+      if (typeof id === 'string' && (id.startsWith('_') || id.endsWith('_'))) {
         // allows muting a pattern x with x_ or _x
         return silence;
       }
@@ -139,13 +147,17 @@ export function repl({
     try {
       updateState({ code, pending: true });
       await injectPatternMethods();
+      setTime(() => scheduler.now()); // TODO: refactor?
       await beforeEval?.({ code });
       shouldHush && hush();
-      let { pattern, meta } = await _evaluate(code, transpiler);
+      let { pattern, meta } = await _evaluate(code, transpiler, transpilerOptions);
       if (Object.keys(pPatterns).length) {
-        pattern = stack(...Object.values(pPatterns));
-      }
-      if (allTransform) {
+        let patterns = Object.values(pPatterns);
+        if (allTransform) {
+          patterns = patterns.map(allTransform);
+        }
+        pattern = stack(...patterns);
+      } else if (allTransform) {
         pattern = allTransform(pattern);
       }
       if (!isPattern(pattern)) {
@@ -153,7 +165,7 @@ export function repl({
         throw new Error(message + (typeof evaluated === 'function' ? ', did you forget to call a function?' : '.'));
       }
       logger(`[eval] code updated`);
-      setPattern(pattern, autostart);
+      pattern = await setPattern(pattern, autostart);
       updateState({
         miniLocations: meta?.miniLocations || [],
         widgets: meta?.widgets || [],
diff --git a/packages/core/signal.mjs b/packages/core/signal.mjs
index 375c4f67..215eac2f 100644
--- a/packages/core/signal.mjs
+++ b/packages/core/signal.mjs
@@ -1,13 +1,13 @@
 /*
-signal.mjs - 
-Copyright (C) 2022 Strudel contributors - see 
+signal.mjs - continuous patterns
+Copyright (C) 2024 Strudel contributors - see 
 This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program.  If not, see .
 */
 
 import { Hap } from './hap.mjs';
 import { Pattern, fastcat, reify, silence, stack, register } from './pattern.mjs';
 import Fraction from './fraction.mjs';
-import { id, _mod, clamp, objectMap } from './util.mjs';
+import { id, _mod } from './util.mjs';
 
 export function steady(value) {
   // A continuous value
@@ -86,6 +86,38 @@ export const tri2 = fastcat(isaw2, saw2);
 
 export const time = signal(id);
 
+/**
+ *  The mouse's x position value ranges from 0 to 1.
+ * @name mousex
+ * @return {Pattern}
+ * @example
+ * n(mousex.segment(4).range(0,7)).scale("C:minor")
+ *
+ */
+
+/**
+ *  The mouse's y position value ranges from 0 to 1.
+ * @name mousey
+ * @return {Pattern}
+ * @example
+ * n(mousey.segment(4).range(0,7)).scale("C:minor")
+ *
+ */
+let _mouseY = 0,
+  _mouseX = 0;
+if (typeof window !== 'undefined') {
+  //document.onmousemove = (e) => {
+  document.addEventListener('mousemove', (e) => {
+    _mouseY = e.clientY / document.body.clientHeight;
+    _mouseX = e.clientX / document.body.clientWidth;
+  });
+}
+
+export const mousey = signal(() => _mouseY);
+export const mouseY = signal(() => _mouseY);
+export const mousex = signal(() => _mouseX);
+export const mouseX = signal(() => _mouseX);
+
 // random signals
 
 const xorwise = (x) => {
@@ -106,7 +138,7 @@ const timeToRand = (x) => Math.abs(intSeedToRand(timeToIntSeed(x)));
 const timeToRandsPrime = (seed, n) => {
   const result = [];
   // eslint-disable-next-line
-  for (let i = 0; i < n; ++n) {
+  for (let i = 0; i < n; ++i) {
     result.push(intSeedToRand(seed));
     seed = xorwise(seed);
   }
@@ -127,6 +159,50 @@ const timeToRands = (t, n) => timeToRandsPrime(timeToIntSeed(t), n);
  */
 export const run = (n) => saw.range(0, n).floor().segment(n);
 
+export const randrun = (n) => {
+  return signal((t) => {
+    // Without adding 0.5, the first cycle is always 0,1,2,3,...
+    const rands = timeToRands(t.floor().add(0.5), n);
+    const nums = rands
+      .map((n, i) => [n, i])
+      .sort((a, b) => a[0] > b[0] - a[0] < b[0])
+      .map((x) => x[1]);
+    const i = t.cyclePos().mul(n).floor() % n;
+    return nums[i];
+  })._segment(n);
+};
+
+const _rearrangeWith = (ipat, n, pat) => {
+  const pats = [...Array(n).keys()].map((i) => pat.zoom(Fraction(i).div(n), Fraction(i + 1).div(n)));
+  return ipat.fmap((i) => pats[i].repeatCycles(n)._fast(n)).innerJoin();
+};
+
+/**
+ * @name shuffle
+ * Slices a pattern into the given number of parts, then plays those parts in random order.
+ * Each part will be played exactly once per cycle.
+ * @example
+ * note("c d e f").sound("piano").shuffle(4)
+ * @example
+ * note("c d e f".shuffle(4), "g").sound("piano")
+ */
+export const shuffle = register('shuffle', (n, pat) => {
+  return _rearrangeWith(randrun(n), n, pat);
+});
+
+/**
+ * @name scramble
+ * Slices a pattern into the given number of parts, then plays those parts at random. Similar to `shuffle`,
+ * but parts might be played more than once, or not at all, per cycle.
+ * @example
+ * note("c d e f").sound("piano").scramble(4)
+ * @example
+ * note("c d e f".scramble(4), "g").sound("piano")
+ */
+export const scramble = register('scramble', (n, pat) => {
+  return _rearrangeWith(_irand(n)._segment(n), n, pat);
+});
+
 /**
  * A continuous pattern of random numbers, between 0 and 1.
  *
@@ -177,204 +253,6 @@ export const _irand = (i) => rand.fmap((x) => Math.trunc(x * i));
  */
 export const irand = (ipat) => reify(ipat).fmap(_irand).innerJoin();
 
-const _pick = function (lookup, pat, modulo = true) {
-  const array = Array.isArray(lookup);
-  const len = Object.keys(lookup).length;
-
-  lookup = objectMap(lookup, reify);
-
-  if (len === 0) {
-    return silence;
-  }
-  return pat.fmap((i) => {
-    let key = i;
-    if (array) {
-      key = modulo ? Math.round(key) % len : clamp(Math.round(key), 0, lookup.length - 1);
-    }
-    return lookup[key];
-  });
-};
-
-/** * Picks patterns (or plain values) either from a list (by index) or a lookup table (by name).
- * Similar to `inhabit`, but maintains the structure of the original patterns.
- * @param {Pattern} pat
- * @param {*} xs
- * @returns {Pattern}
- * @example
- * note("<0 1 2!2 3>".pick(["g a", "e f", "f g f g" , "g c d"]))
- * @example
- * sound("<0 1 [2,0]>".pick(["bd sd", "cp cp", "hh hh"]))
- * @example
- * sound("<0!2 [0,1] 1>".pick(["bd(3,8)", "sd sd"]))
- * @example
- * s("".pick({a: "bd(3,8)", b: "sd sd"}))
- */
-
-export const pick = function (lookup, pat) {
-  // backward compatibility - the args used to be flipped
-  if (Array.isArray(pat)) {
-    [pat, lookup] = [lookup, pat];
-  }
-  return __pick(lookup, pat);
-};
-
-const __pick = register('pick', function (lookup, pat) {
-  return _pick(lookup, pat, false).innerJoin();
-});
-
-/** * The same as `pick`, but if you pick a number greater than the size of the list,
- * it wraps around, rather than sticking at the maximum value.
- * For example, if you pick the fifth pattern of a list of three, you'll get the
- * second one.
- * @param {Pattern} pat
- * @param {*} xs
- * @returns {Pattern}
- */
-
-export const pickmod = register('pickmod', function (lookup, pat) {
-  return _pick(lookup, pat, true).innerJoin();
-});
-
-/** * pickF lets you use a pattern of numbers to pick which function to apply to another pattern.
- * @param {Pattern} pat
- * @param {Pattern} lookup a pattern of indices
- * @param {function[]} funcs the array of functions from which to pull
- * @returns {Pattern}
- * @example
- * s("bd [rim hh]").pickF("<0 1 2>", [rev,jux(rev),fast(2)])
- * @example
- * note("(3,8)").s("square")
- *     .pickF("<0 2> 1", [jux(rev),fast(2),x=>x.lpf(800)])
- */
-export const pickF = register('pickF', function (lookup, funcs, pat) {
-  return pat.apply(pick(lookup, funcs));
-});
-
-/** * The same as `pickF`, but if you pick a number greater than the size of the functions list,
- * it wraps around, rather than sticking at the maximum value.
- * @param {Pattern} pat
- * @param {Pattern} lookup a pattern of indices
- * @param {function[]} funcs the array of functions from which to pull
- * @returns {Pattern}
- */
-export const pickmodF = register('pickmodF', function (lookup, funcs, pat) {
-  return pat.apply(pickmod(lookup, funcs));
-});
-
-/** * Similar to `pick`, but it applies an outerJoin instead of an innerJoin.
- * @param {Pattern} pat
- * @param {*} xs
- * @returns {Pattern}
- */
-export const pickOut = register('pickOut', function (lookup, pat) {
-  return _pick(lookup, pat, false).outerJoin();
-});
-
-/** * The same as `pickOut`, but if you pick a number greater than the size of the list,
- * it wraps around, rather than sticking at the maximum value.
- * @param {Pattern} pat
- * @param {*} xs
- * @returns {Pattern}
- */
-export const pickmodOut = register('pickmodOut', function (lookup, pat) {
-  return _pick(lookup, pat, true).outerJoin();
-});
-
-/** * Similar to `pick`, but the choosen pattern is restarted when its index is triggered.
- * @param {Pattern} pat
- * @param {*} xs
- * @returns {Pattern}
- */
-export const pickRestart = register('pickRestart', function (lookup, pat) {
-  return _pick(lookup, pat, false).restartJoin();
-});
-
-/** * The same as `pickRestart`, but if you pick a number greater than the size of the list,
- * it wraps around, rather than sticking at the maximum value.
- * @param {Pattern} pat
- * @param {*} xs
- * @returns {Pattern}
- */
-export const pickmodRestart = register('pickmodRestart', function (lookup, pat) {
-  return _pick(lookup, pat, true).restartJoin();
-});
-
-/** * Similar to `pick`, but the choosen pattern is reset when its index is triggered.
- * @param {Pattern} pat
- * @param {*} xs
- * @returns {Pattern}
- */
-export const pickReset = register('pickReset', function (lookup, pat) {
-  return _pick(lookup, pat, false).resetJoin();
-});
-
-/** * The same as `pickReset`, but if you pick a number greater than the size of the list,
- * it wraps around, rather than sticking at the maximum value.
- * @param {Pattern} pat
- * @param {*} xs
- * @returns {Pattern}
- */
-export const pickmodReset = register('pickmodReset', function (lookup, pat) {
-  return _pick(lookup, pat, true).resetJoin();
-});
-
-/**
-/** * Picks patterns (or plain values) either from a list (by index) or a lookup table (by name).
- * Similar to `pick`, but cycles are squeezed into the target ('inhabited') pattern.
- * @name inhabit
- * @synonyms pickSqueeze
- * @param {Pattern} pat
- * @param {*} xs
- * @returns {Pattern}
- * @example
- * "".inhabit({a: s("bd(3,8)"),
-                          b: s("cp sd")
-                         })
- * @example
- * s("a@2 [a b] a".inhabit({a: "bd(3,8)", b: "sd sd"})).slow(4)
- */
-export const { inhabit, pickSqueeze } = register(['inhabit', 'pickSqueeze'], function (lookup, pat) {
-  return _pick(lookup, pat, false).squeezeJoin();
-});
-
-/** * The same as `inhabit`, but if you pick a number greater than the size of the list,
- * it wraps around, rather than sticking at the maximum value.
- * For example, if you pick the fifth pattern of a list of three, you'll get the
- * second one.
- * @name inhabitmod
- * @synonyms pickmodSqueeze
- * @param {Pattern} pat
- * @param {*} xs
- * @returns {Pattern}
- */
-
-export const { inhabitmod, pickmodSqueeze } = register(['inhabitmod', 'pickmodSqueeze'], function (lookup, pat) {
-  return _pick(lookup, pat, true).squeezeJoin();
-});
-
-/**
- * Pick from the list of values (or patterns of values) via the index using the given
- * pattern of integers. The selected pattern will be compressed to fit the duration of the selecting event
- * @param {Pattern} pat
- * @param {*} xs
- * @returns {Pattern}
- * @example
- * note(squeeze("<0@2 [1!2] 2>", ["g a", "f g f g" , "g a c d"]))
- */
-
-export const squeeze = (pat, xs) => {
-  xs = xs.map(reify);
-  if (xs.length == 0) {
-    return silence;
-  }
-  return pat
-    .fmap((i) => {
-      const key = _mod(Math.round(i), xs.length);
-      return xs[key];
-    })
-    .squeezeJoin();
-};
-
 export const __chooseWith = (pat, xs) => {
   xs = xs.map(reify);
   if (xs.length == 0) {
@@ -513,8 +391,11 @@ export const perlinWith = (pat) => {
  */
 export const perlin = perlinWith(time.fmap((v) => Number(v)));
 
-export const degradeByWith = register('degradeByWith', (withPat, x, pat) =>
-  pat.fmap((a) => (_) => a).appLeft(withPat.filterValues((v) => v > x)),
+export const degradeByWith = register(
+  'degradeByWith',
+  (withPat, x, pat) => pat.fmap((a) => (_) => a).appLeft(withPat.filterValues((v) => v > x)),
+  true,
+  true,
 );
 
 /**
@@ -531,9 +412,14 @@ export const degradeByWith = register('degradeByWith', (withPat, x, pat) =>
  * @example
  * s("[hh?0.2]*8")
  */
-export const degradeBy = register('degradeBy', function (x, pat) {
-  return pat._degradeByWith(rand, x);
-});
+export const degradeBy = register(
+  'degradeBy',
+  function (x, pat) {
+    return pat._degradeByWith(rand, x);
+  },
+  true,
+  true,
+);
 
 /**
  *
@@ -547,7 +433,7 @@ export const degradeBy = register('degradeBy', function (x, pat) {
  * @example
  * s("[hh?]*8")
  */
-export const degrade = register('degrade', (pat) => pat._degradeBy(0.5));
+export const degrade = register('degrade', (pat) => pat._degradeBy(0.5), true, true);
 
 /**
  * Inverse of `degradeBy`: Randomly removes events from the pattern by a given amount.
@@ -567,12 +453,17 @@ export const degrade = register('degrade', (pat) => pat._degradeBy(0.5));
  *   x => x.undegradeBy(0.8).pan(1)
  * )
  */
-export const undegradeBy = register('undegradeBy', function (x, pat) {
-  return pat._degradeByWith(
-    rand.fmap((r) => 1 - r),
-    x,
-  );
-});
+export const undegradeBy = register(
+  'undegradeBy',
+  function (x, pat) {
+    return pat._degradeByWith(
+      rand.fmap((r) => 1 - r),
+      x,
+    );
+  },
+  true,
+  true,
+);
 
 /**
  * Inverse of `degrade`: Randomly removes 50% of events from the pattern. Shorthand for `.undegradeBy(0.5)`
@@ -589,7 +480,7 @@ export const undegradeBy = register('undegradeBy', function (x, pat) {
  *   x => x.undegrade().pan(1)
  * )
  */
-export const undegrade = register('undegrade', (pat) => pat._undegradeBy(0.5));
+export const undegrade = register('undegrade', (pat) => pat._undegradeBy(0.5), true, true);
 
 /**
  *
diff --git a/packages/core/test/pattern.test.mjs b/packages/core/test/pattern.test.mjs
index 845ed00a..31ec4868 100644
--- a/packages/core/test/pattern.test.mjs
+++ b/packages/core/test/pattern.test.mjs
@@ -937,6 +937,9 @@ describe('Pattern', () => {
           .firstCycle(),
       );
     });
+    it('Can chop chops', () => {
+      expect(pure({ s: 'bev' }).chop(2).chop(2).firstCycle()).toStrictEqual(pure({ s: 'bev' }).chop(4).firstCycle());
+    });
   });
   describe('range', () => {
     it('Can be patterned', () => {
@@ -1209,4 +1212,45 @@ describe('Pattern', () => {
       }
     });
   });
+  describe('s_expand', () => {
+    it('can expand four things in half', () => {
+      expect(
+        sameFirst(
+          sequence(0, 1, 2, 3).s_expand(1, 0.5),
+          s_cat(sequence(0, 1, 2, 3), sequence(0, 1, 2, 3).s_expand(0.5)),
+        ),
+      );
+    });
+    it('can expand five things in half', () => {
+      expect(
+        sameFirst(
+          sequence(0, 1, 2, 3, 4).s_expand(1, 0.5),
+          s_cat(sequence(0, 1, 2, 3, 4), sequence(0, 1, 2, 3, 4).s_expand(0.5)),
+        ),
+      );
+    });
+  });
+  describe('stepJoin', () => {
+    it('can join a pattern with a tactus of 2', () => {
+      expect(
+        sameFirst(
+          sequence(pure(pure('a')), pure(pure('b').setTactus(2))).stepJoin(),
+          s_cat(pure('a'), pure('b').setTactus(2)),
+        ),
+      );
+    });
+    it('can join a pattern with a tactus of 0.5', () => {
+      expect(
+        sameFirst(
+          sequence(pure(pure('a')), pure(pure('b').setTactus(0.5))).stepJoin(),
+          s_cat(pure('a'), pure('b').setTactus(0.5)),
+        ),
+      );
+    });
+  });
+  describe('loopAt', () => {
+    it('maintains tactus', () => {
+      expect(s('bev').chop(8).loopAt(2).tactus).toStrictEqual(Fraction(4));
+    });
+  });
 });
diff --git a/packages/core/util.mjs b/packages/core/util.mjs
index 03f8b410..bc844057 100644
--- a/packages/core/util.mjs
+++ b/packages/core/util.mjs
@@ -91,6 +91,9 @@ export const midi2note = (n) => {
 // modulo that works with negative numbers e.g. _mod(-1, 3) = 2. Works on numbers (rather than patterns of numbers, as @mod@ from pattern.mjs does)
 export const _mod = (n, m) => ((n % m) + m) % m;
 
+// average numbers in an array
+export const averageArray = (arr) => arr.reduce((a, b) => a + b) / arr.length;
+
 export function nanFallback(value, fallback = 0) {
   if (isNaN(Number(value))) {
     logger(`"${value}" is not a number, falling back to ${fallback}`, 'warning');
@@ -360,6 +363,76 @@ export function objectMap(obj, fn) {
   }
   return Object.fromEntries(Object.entries(obj).map(([k, v], i) => [k, fn(v, k, i)]));
 }
+export function cycleToSeconds(cycle, cps) {
+  return cycle / cps;
+}
+
+// utility for averaging two clocks together to account for drift
+export class ClockCollator {
+  constructor({
+    getTargetClockTime = getUnixTimeSeconds,
+    weight = 16,
+    offsetDelta = 0.005,
+    checkAfterTime = 2,
+    resetAfterTime = 8,
+  }) {
+    this.offsetTime;
+    this.timeAtPrevOffsetSample;
+    this.prevOffsetTimes = [];
+    this.getTargetClockTime = getTargetClockTime;
+    this.weight = weight;
+    this.offsetDelta = offsetDelta;
+    this.checkAfterTime = checkAfterTime;
+    this.resetAfterTime = resetAfterTime;
+    this.reset = () => {
+      this.prevOffsetTimes = [];
+      this.offsetTime = null;
+      this.timeAtPrevOffsetSample = null;
+    };
+  }
+  calculateOffset(currentTime) {
+    const targetClockTime = this.getTargetClockTime();
+    const diffBetweenTimeSamples = targetClockTime - this.timeAtPrevOffsetSample;
+    const newOffsetTime = targetClockTime - currentTime;
+    // recalcuate the diff from scratch if the clock has been paused for some time.
+    if (diffBetweenTimeSamples > this.resetAfterTime) {
+      this.reset();
+    }
+
+    if (this.offsetTime == null) {
+      this.offsetTime = newOffsetTime;
+    }
+    this.prevOffsetTimes.push(newOffsetTime);
+    if (this.prevOffsetTimes.length > this.weight) {
+      this.prevOffsetTimes.shift();
+    }
+
+    // after X time has passed, the average of the previous weight offset times is calculated and used as a stable reference
+    // for calculating the timestamp
+    if (this.timeAtPrevOffsetSample == null || diffBetweenTimeSamples > this.checkAfterTime) {
+      this.timeAtPrevOffsetSample = targetClockTime;
+      const rollingOffsetTime = averageArray(this.prevOffsetTimes);
+      //when the clock offsets surpass the delta, set the new reference time
+      if (Math.abs(rollingOffsetTime - this.offsetTime) > this.offsetDelta) {
+        this.offsetTime = rollingOffsetTime;
+      }
+    }
+
+    return this.offsetTime;
+  }
+
+  calculateTimestamp(currentTime, targetTime) {
+    return this.calculateOffset(currentTime) + targetTime;
+  }
+}
+
+export function getPerformanceTimeSeconds() {
+  return performance.now() * 0.001;
+}
+
+function getUnixTimeSeconds() {
+  return Date.now() * 0.001;
+}
 
 // Floating point versions, see Fraction for rational versions
 // // greatest common divisor
diff --git a/packages/core/vite.config.js b/packages/core/vite.config.js
index 5df3edc1..718798fb 100644
--- a/packages/core/vite.config.js
+++ b/packages/core/vite.config.js
@@ -4,6 +4,7 @@ import { resolve } from 'path';
 
 // https://vitejs.dev/config/
 export default defineConfig({
+  base: './',
   plugins: [],
   build: {
     lib: {
diff --git a/packages/csound/package.json b/packages/csound/package.json
index e0811208..70967f21 100644
--- a/packages/csound/package.json
+++ b/packages/csound/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@strudel/csound",
-  "version": "1.0.1",
+  "version": "1.1.0",
   "description": "csound bindings for strudel",
   "main": "index.mjs",
   "type": "module",
diff --git a/packages/desktopbridge/oscbridge.mjs b/packages/desktopbridge/oscbridge.mjs
index 81366367..9bead6d1 100644
--- a/packages/desktopbridge/oscbridge.mjs
+++ b/packages/desktopbridge/oscbridge.mjs
@@ -1,43 +1,36 @@
-import { parseNumeral, Pattern, getEventOffsetMs } from '@strudel/core';
+import { Pattern, ClockCollator } from '@strudel/core';
+import { parseControlsFromHap } from 'node_modules/@strudel/osc/osc.mjs';
 import { Invoke } from './utils.mjs';
 
-Pattern.prototype.osc = function () {
-  return this.onTrigger(async (time, hap, currentTime, cps = 1, targetTime) => {
-    hap.ensureObjectValue();
-    const cycle = hap.wholeOrPart().begin.valueOf();
-    const delta = hap.duration.valueOf();
-    const controls = Object.assign({}, { cps, cycle, delta }, hap.value);
-    // make sure n and note are numbers
-    controls.n && (controls.n = parseNumeral(controls.n));
-    controls.note && (controls.note = parseNumeral(controls.note));
+const collator = new ClockCollator({});
 
-    const params = [];
+export async function oscTriggerTauri(t_deprecate, hap, currentTime, cps = 1, targetTime) {
+  const controls = parseControlsFromHap(hap, cps);
+  const params = [];
+  const timestamp = collator.calculateTimestamp(currentTime, targetTime);
 
-    const timestamp = Math.round(Date.now() + getEventOffsetMs(targetTime, currentTime));
+  Object.keys(controls).forEach((key) => {
+    const val = controls[key];
+    const value = typeof val === 'number' ? val.toString() : val;
 
-    Object.keys(controls).forEach((key) => {
-      const val = controls[key];
-      const value = typeof val === 'number' ? val.toString() : val;
-
-      if (value == null) {
-        return;
-      }
-      params.push({
-        name: key,
-        value,
-        valueisnumber: typeof val === 'number',
-      });
+    if (value == null) {
+      return;
+    }
+    params.push({
+      name: key,
+      value,
+      valueisnumber: typeof val === 'number',
     });
-
-    const messagesfromjs = [];
-    if (params.length) {
-      messagesfromjs.push({ target: '/dirt/play', timestamp, params });
-    }
-
-    if (messagesfromjs.length) {
-      setTimeout(() => {
-        Invoke('sendosc', { messagesfromjs });
-      });
-    }
   });
+
+  if (params.length === 0) {
+    return;
+  }
+  const message = { target: '/dirt/play', timestamp, params };
+  setTimeout(() => {
+    Invoke('sendosc', { messagesfromjs: [message] });
+  });
+}
+Pattern.prototype.osc = function () {
+  return this.onTrigger(oscTriggerTauri);
 };
diff --git a/packages/draw/draw.mjs b/packages/draw/draw.mjs
index cfd2ce75..0576c297 100644
--- a/packages/draw/draw.mjs
+++ b/packages/draw/draw.mjs
@@ -26,7 +26,7 @@ export const getDrawContext = (id = 'test-canvas', options) => {
       }, 200);
     });
   }
-  return canvas.getContext(contextType);
+  return canvas.getContext(contextType, { willReadFrequently: true });
 };
 
 let animationFrames = {};
@@ -36,8 +36,8 @@ function stopAnimationFrame(id) {
     delete animationFrames[id];
   }
 }
-function stopAllAnimations() {
-  Object.keys(animationFrames).forEach((id) => stopAnimationFrame(id));
+function stopAllAnimations(replID) {
+  Object.keys(animationFrames).forEach((id) => (!replID || id.startsWith(replID)) && stopAnimationFrame(id));
 }
 
 let memory = {};
@@ -72,18 +72,25 @@ Pattern.prototype.draw = function (fn, options) {
   return this;
 };
 
-export const cleanupDraw = (clearScreen = true) => {
+export const cleanupDraw = (clearScreen = true, id) => {
   const ctx = getDrawContext();
-  clearScreen && ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.width);
-  stopAllAnimations();
-  if (window.strudelScheduler) {
-    clearInterval(window.strudelScheduler);
-  }
+  clearScreen && ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
+  stopAllAnimations(id);
 };
 
-Pattern.prototype.onPaint = function () {
-  console.warn('[draw] onPaint was not overloaded. Some drawings might not work');
-  return this;
+Pattern.prototype.onPaint = function (painter) {
+  return this.withState((state) => {
+    if (!state.controls.painters) {
+      state.controls.painters = [];
+    }
+    state.controls.painters.push(painter);
+  });
+};
+
+Pattern.prototype.getPainters = function () {
+  let painters = [];
+  this.queryArc(0, 0, { painters });
+  return painters;
 };
 
 // const round = (x) => Math.round(x * 1000) / 1000;
@@ -122,6 +129,7 @@ export class Drawer {
     this.visibleHaps = [];
     this.lastFrame = null;
     this.drawTime = drawTime;
+    this.painters = [];
     this.framer = new Framer(
       () => {
         if (!this.scheduler) {
@@ -146,7 +154,7 @@ export class Drawer {
           // add new haps with onset (think right edge bars scrolling in)
           .concat(haps.filter((h) => h.hasOnset()));
         const time = phase - lookahead;
-        onDraw(this.visibleHaps, time, this);
+        onDraw(this.visibleHaps, time, this, this.painters);
       },
       (err) => {
         console.warn('draw error', err);
@@ -164,11 +172,13 @@ export class Drawer {
     t = t ?? scheduler.now();
     this.scheduler = scheduler;
     let [_, lookahead] = this.drawTime;
+    // +0.1 = workaround for weird holes in query..
     const [begin, end] = [Math.max(t, 0), t + lookahead + 0.1];
     // remove all future haps
     this.visibleHaps = this.visibleHaps.filter((h) => h.whole.begin < t);
+    this.painters = []; // will get populated by .onPaint calls attached to the pattern
     // query future haps
-    const futureHaps = scheduler.pattern.queryArc(begin, end); // +0.1 = workaround for weird holes in query..
+    const futureHaps = scheduler.pattern.queryArc(begin, end, { painters: this.painters });
     // append future haps
     this.visibleHaps = this.visibleHaps.concat(futureHaps);
   }
@@ -191,7 +201,16 @@ export function getComputedPropertyValue(name) {
   return getComputedStyle(document.documentElement).getPropertyValue(name);
 }
 
-let theme = {};
+let theme = {
+  background: '#222',
+  foreground: '#75baff',
+  caret: '#ffcc00',
+  selection: 'rgba(128, 203, 196, 0.5)',
+  selectionMatch: '#036dd626',
+  lineHighlight: '#00000050',
+  gutterBackground: 'transparent',
+  gutterForeground: '#8a919966',
+};
 export function getTheme() {
   return theme;
 }
diff --git a/packages/draw/package.json b/packages/draw/package.json
index 346a4723..a6a88ecf 100644
--- a/packages/draw/package.json
+++ b/packages/draw/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@strudel/draw",
-  "version": "1.0.1",
+  "version": "1.1.0",
   "description": "Helpers for drawing with Strudel",
   "main": "index.mjs",
   "type": "module",
diff --git a/packages/draw/pianoroll.mjs b/packages/draw/pianoroll.mjs
index 1bdf81c4..2c6742cd 100644
--- a/packages/draw/pianoroll.mjs
+++ b/packages/draw/pianoroll.mjs
@@ -67,6 +67,7 @@ Pattern.prototype.pianoroll = function (options = {}) {
  * Displays a midi-style piano roll
  *
  * @name pianoroll
+ * @synonyms punchcard
  * @param {Object} options Object containing all the optional following parameters as key value pairs:
  * @param {integer} cycles number of cycles to be displayed at the same time - defaults to 4
  * @param {number} playhead location of the active notes on the time axis - 0 to 1, defaults to 0.5
@@ -94,7 +95,11 @@ Pattern.prototype.pianoroll = function (options = {}) {
  * @param {boolean} autorange automatically calculate the minMidi and maxMidi parameters - 0 by default
  *
  * @example
- * note("C2 A2 G2").euclid(5,8).s('piano').clip(1).color('salmon').pianoroll({vertical:1, labels:1})
+ * note("c2 a2 eb2")
+ * .euclid(5,8)
+ * .s('sawtooth')
+ * .lpenv(4).lpf(300)
+ * ._pianoroll({ labels: 1 })
  */
 export function pianoroll({
   time,
@@ -108,12 +113,12 @@ export function pianoroll({
   active = getTheme().foreground,
   background = 'transparent',
   smear = 0,
-  playheadColor = 'white',
+  playheadColor = getTheme().foreground,
   minMidi = 10,
   maxMidi = 90,
   autorange = 0,
   timeframe: timeframeProp,
-  fold = 0,
+  fold = 1,
   vertical = 0,
   labels = false,
   fill = 1,
@@ -266,7 +271,7 @@ export function getDrawOptions(drawTime, options = {}) {
   let [lookbehind, lookahead] = drawTime;
   lookbehind = Math.abs(lookbehind);
   const cycles = lookahead + lookbehind;
-  const playhead = lookbehind / cycles;
+  const playhead = cycles !== 0 ? lookbehind / cycles : 0;
   return { fold: 1, ...options, cycles, playhead };
 }
 
diff --git a/packages/draw/pitchwheel.mjs b/packages/draw/pitchwheel.mjs
index 8d3cfe61..ba76df07 100644
--- a/packages/draw/pitchwheel.mjs
+++ b/packages/draw/pitchwheel.mjs
@@ -113,6 +113,23 @@ export function pitchwheel({
   return;
 }
 
+/**
+ * Renders a pitch circle to visualize frequencies within one octave
+ * @name pitchwheel
+ * @param {number} hapcircles
+ * @param {number} circle
+ * @param {number} edo
+ * @param {string} root
+ * @param {number} thickness
+ * @param {number} hapRadius
+ * @param {string} mode
+ * @param {number} margin
+ * @example
+ * n("0 .. 12").scale("C:chromatic")
+ * .s("sawtooth")
+ * .lpf(500)
+ * ._pitchwheel()
+ */
 Pattern.prototype.pitchwheel = function (options = {}) {
   let { ctx = getDrawContext(), id = 1 } = options;
   return this.tag(id).onPaint((_, time, haps) =>
diff --git a/packages/draw/spiral.mjs b/packages/draw/spiral.mjs
index 22f93f5d..cebf3d37 100644
--- a/packages/draw/spiral.mjs
+++ b/packages/draw/spiral.mjs
@@ -125,6 +125,33 @@ function drawSpiral(options) {
   });
 }
 
+/**
+ * Displays a spiral visual.
+ *
+ * @name spiral
+ * @param {Object} options Object containing all the optional following parameters as key value pairs:
+ * @param {number} stretch controls the rotations per cycle ratio, where 1 = 1 cycle / 360 degrees
+ * @param {number} size the diameter of the spiral
+ * @param {number} thickness line thickness
+ * @param {string} cap style of line ends: butt (default), round, square
+ * @param {string} inset number of rotations before spiral starts (default 3)
+ * @param {string} playheadColor color of playhead, defaults to white
+ * @param {number} playheadLength length of playhead in rotations, defaults to 0.02
+ * @param {number} playheadThickness thickness of playheadrotations, defaults to thickness
+ * @param {number} padding space around spiral
+ * @param {number} steady steadyness of spiral vs playhead. 1 = spiral doesn't move, playhead does.
+ * @param {number} activeColor color of active segment. defaults to foreground of theme
+ * @param {number} inactiveColor color of inactive segments. defaults to gutterForeground of theme
+ * @param {boolean} colorizeInactive wether or not to colorize inactive segments, defaults to 0
+ * @param {boolean} fade wether or not past and future should fade out. defaults to 1
+ * @param {boolean} logSpiral wether or not the spiral should be logarithmic. defaults to 0
+ * @example
+ * note("c2 a2 eb2")
+ * .euclid(5,8)
+ * .s('sawtooth')
+ * .lpenv(4).lpf(300)
+ * ._spiral({ steady: .96 })
+ */
 Pattern.prototype.spiral = function (options = {}) {
   return this.onPaint((ctx, time, haps, drawTime) => drawSpiral({ ctx, time, haps, drawTime, ...options }));
 };
diff --git a/packages/embed/package.json b/packages/embed/package.json
index 55a9f0a5..afd88788 100644
--- a/packages/embed/package.json
+++ b/packages/embed/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@strudel/embed",
-  "version": "1.0.0",
+  "version": "1.1.0",
   "description": "Embeddable Web Component to load a Strudel REPL into an iframe",
   "main": "embed.js",
   "type": "module",
diff --git a/packages/hs2js/.npmignore b/packages/hs2js/.npmignore
new file mode 100644
index 00000000..0fdbcf58
--- /dev/null
+++ b/packages/hs2js/.npmignore
@@ -0,0 +1,2 @@
+pnpm-lock.yaml
+vite.config.js
diff --git a/packages/hs2js/LICENSE b/packages/hs2js/LICENSE
new file mode 100644
index 00000000..0ad25db4
--- /dev/null
+++ b/packages/hs2js/LICENSE
@@ -0,0 +1,661 @@
+                    GNU AFFERO GENERAL PUBLIC LICENSE
+                       Version 3, 19 November 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. 
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The GNU Affero General Public License is a free, copyleft license for
+software and other kinds of works, specifically designed to ensure
+cooperation with the community in the case of network server software.
+
+  The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works.  By contrast,
+our General Public Licenses are intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+  Developers that use our General Public Licenses protect your rights
+with two steps: (1) assert copyright on the software, and (2) offer
+you this License which gives you legal permission to copy, distribute
+and/or modify the software.
+
+  A secondary benefit of defending all users' freedom is that
+improvements made in alternate versions of the program, if they
+receive widespread use, become available for other developers to
+incorporate.  Many developers of free software are heartened and
+encouraged by the resulting cooperation.  However, in the case of
+software used on network servers, this result may fail to come about.
+The GNU General Public License permits making a modified version and
+letting the public access it on a server without ever releasing its
+source code to the public.
+
+  The GNU Affero General Public License is designed specifically to
+ensure that, in such cases, the modified source code becomes available
+to the community.  It requires the operator of a network server to
+provide the source code of the modified version running there to the
+users of that server.  Therefore, public use of a modified version, on
+a publicly accessible server, gives the public access to the source
+code of the modified version.
+
+  An older license, called the Affero General Public License and
+published by Affero, was designed to accomplish similar goals.  This is
+a different license, not a version of the Affero GPL, but Affero has
+released a new version of the Affero GPL which permits relicensing under
+this license.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                       TERMS AND CONDITIONS
+
+  0. Definitions.
+
+  "This License" refers to version 3 of the GNU Affero General Public License.
+
+  "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+  "The Program" refers to any copyrightable work licensed under this
+License.  Each licensee is addressed as "you".  "Licensees" and
+"recipients" may be individuals or organizations.
+
+  To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy.  The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+  A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+  To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy.  Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+  To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies.  Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+  An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License.  If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+  1. Source Code.
+
+  The "source code" for a work means the preferred form of the work
+for making modifications to it.  "Object code" means any non-source
+form of a work.
+
+  A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+  The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form.  A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+  The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities.  However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work.  For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+  The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+  The Corresponding Source for a work in source code form is that
+same work.
+
+  2. Basic Permissions.
+
+  All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met.  This License explicitly affirms your unlimited
+permission to run the unmodified Program.  The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work.  This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+  You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force.  You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright.  Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+  Conveying under any other circumstances is permitted solely under
+the conditions stated below.  Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+  No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+  When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+  4. Conveying Verbatim Copies.
+
+  You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+  You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+  5. Conveying Modified Source Versions.
+
+  You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+    a) The work must carry prominent notices stating that you modified
+    it, and giving a relevant date.
+
+    b) The work must carry prominent notices stating that it is
+    released under this License and any conditions added under section
+    7.  This requirement modifies the requirement in section 4 to
+    "keep intact all notices".
+
+    c) You must license the entire work, as a whole, under this
+    License to anyone who comes into possession of a copy.  This
+    License will therefore apply, along with any applicable section 7
+    additional terms, to the whole of the work, and all its parts,
+    regardless of how they are packaged.  This License gives no
+    permission to license the work in any other way, but it does not
+    invalidate such permission if you have separately received it.
+
+    d) If the work has interactive user interfaces, each must display
+    Appropriate Legal Notices; however, if the Program has interactive
+    interfaces that do not display Appropriate Legal Notices, your
+    work need not make them do so.
+
+  A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit.  Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+  6. Conveying Non-Source Forms.
+
+  You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+    a) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by the
+    Corresponding Source fixed on a durable physical medium
+    customarily used for software interchange.
+
+    b) Convey the object code in, or embodied in, a physical product
+    (including a physical distribution medium), accompanied by a
+    written offer, valid for at least three years and valid for as
+    long as you offer spare parts or customer support for that product
+    model, to give anyone who possesses the object code either (1) a
+    copy of the Corresponding Source for all the software in the
+    product that is covered by this License, on a durable physical
+    medium customarily used for software interchange, for a price no
+    more than your reasonable cost of physically performing this
+    conveying of source, or (2) access to copy the
+    Corresponding Source from a network server at no charge.
+
+    c) Convey individual copies of the object code with a copy of the
+    written offer to provide the Corresponding Source.  This
+    alternative is allowed only occasionally and noncommercially, and
+    only if you received the object code with such an offer, in accord
+    with subsection 6b.
+
+    d) Convey the object code by offering access from a designated
+    place (gratis or for a charge), and offer equivalent access to the
+    Corresponding Source in the same way through the same place at no
+    further charge.  You need not require recipients to copy the
+    Corresponding Source along with the object code.  If the place to
+    copy the object code is a network server, the Corresponding Source
+    may be on a different server (operated by you or a third party)
+    that supports equivalent copying facilities, provided you maintain
+    clear directions next to the object code saying where to find the
+    Corresponding Source.  Regardless of what server hosts the
+    Corresponding Source, you remain obligated to ensure that it is
+    available for as long as needed to satisfy these requirements.
+
+    e) Convey the object code using peer-to-peer transmission, provided
+    you inform other peers where the object code and Corresponding
+    Source of the work are being offered to the general public at no
+    charge under subsection 6d.
+
+  A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+  A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling.  In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage.  For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product.  A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+  "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source.  The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+  If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information.  But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+  The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed.  Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+  Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+  7. Additional Terms.
+
+  "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law.  If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+  When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it.  (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.)  You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+  Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+    a) Disclaiming warranty or limiting liability differently from the
+    terms of sections 15 and 16 of this License; or
+
+    b) Requiring preservation of specified reasonable legal notices or
+    author attributions in that material or in the Appropriate Legal
+    Notices displayed by works containing it; or
+
+    c) Prohibiting misrepresentation of the origin of that material, or
+    requiring that modified versions of such material be marked in
+    reasonable ways as different from the original version; or
+
+    d) Limiting the use for publicity purposes of names of licensors or
+    authors of the material; or
+
+    e) Declining to grant rights under trademark law for use of some
+    trade names, trademarks, or service marks; or
+
+    f) Requiring indemnification of licensors and authors of that
+    material by anyone who conveys the material (or modified versions of
+    it) with contractual assumptions of liability to the recipient, for
+    any liability that these contractual assumptions directly impose on
+    those licensors and authors.
+
+  All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10.  If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term.  If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+  If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+  Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+  8. Termination.
+
+  You may not propagate or modify a covered work except as expressly
+provided under this License.  Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+  However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+  Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+  Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License.  If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+  9. Acceptance Not Required for Having Copies.
+
+  You are not required to accept this License in order to receive or
+run a copy of the Program.  Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance.  However,
+nothing other than this License grants you permission to propagate or
+modify any covered work.  These actions infringe copyright if you do
+not accept this License.  Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+  10. Automatic Licensing of Downstream Recipients.
+
+  Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License.  You are not responsible
+for enforcing compliance by third parties with this License.
+
+  An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations.  If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+  You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License.  For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+  11. Patents.
+
+  A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based.  The
+work thus licensed is called the contributor's "contributor version".
+
+  A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version.  For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+  Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+  In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement).  To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+  If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients.  "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+  If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+  A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License.  You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+  Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+  12. No Surrender of Others' Freedom.
+
+  If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all.  For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+  13. Remote Network Interaction; Use with the GNU General Public License.
+
+  Notwithstanding any other provision of this License, if you modify the
+Program, your modified version must prominently offer all users
+interacting with it remotely through a computer network (if your version
+supports such interaction) an opportunity to receive the Corresponding
+Source of your version by providing access to the Corresponding Source
+from a network server at no charge, through some standard or customary
+means of facilitating copying of software.  This Corresponding Source
+shall include the Corresponding Source for any work covered by version 3
+of the GNU General Public License that is incorporated pursuant to the
+following paragraph.
+
+  Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU General Public License into a single
+combined work, and to convey the resulting work.  The terms of this
+License will continue to apply to the part which is the covered work,
+but the work with which it is combined will remain governed by version
+3 of the GNU General Public License.
+
+  14. Revised Versions of this License.
+
+  The Free Software Foundation may publish revised and/or new versions of
+the GNU Affero General Public License from time to time.  Such new versions
+will be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+  Each version is given a distinguishing version number.  If the
+Program specifies that a certain numbered version of the GNU Affero General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation.  If the Program does not specify a version number of the
+GNU Affero General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+  If the Program specifies that a proxy can decide which future
+versions of the GNU Affero General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+  Later license versions may give you additional or different
+permissions.  However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+  15. Disclaimer of Warranty.
+
+  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. Limitation of Liability.
+
+  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+  17. Interpretation of Sections 15 and 16.
+
+  If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    
+    Copyright (C)   
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU Affero General Public License as published
+    by the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU Affero General Public License for more details.
+
+    You should have received a copy of the GNU Affero General Public License
+    along with this program.  If not, see .
+
+Also add information on how to contact you by electronic and paper mail.
+
+  If your software can interact with users remotely through a computer
+network, you should also make sure that it provides a way for users to
+get its source.  For example, if your program is a web application, its
+interface could display a "Source" link that leads users to an archive
+of the code.  There are many ways you could offer source, and different
+solutions will be better for different programs; see section 13 for the
+specific requirements.
+
+  You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU AGPL, see
+.
diff --git a/packages/hs2js/README.md b/packages/hs2js/README.md
new file mode 100644
index 00000000..24d9c774
--- /dev/null
+++ b/packages/hs2js/README.md
@@ -0,0 +1,127 @@
+# hs2js
+
+Experimental haskell in javascript interpreter. Many haskell features are not implemented.
+This projects mainly exists to be able to write and interpret [Tidal Cycles](https://tidalcycles.org/) code in the browser,
+as part of [Strudel](https://github.com/tidalcycles/strudel). This project could only exist thanks to [tree-sitter-haskell](https://github.com/tree-sitter/tree-sitter-haskell).
+
+## Installation
+
+### Via Script Tag
+
+You can load the library directly from a script tag via unpkg:
+
+```html
+
+
+
+```
+
+### Via npm
+
+You need to add `postinstall` to your `package.json` script to copy the parser to your `public` folder:
+
+```json
+{
+  "scripts": {
+    "postinstall": "cp node_modules/hs2js/dist/tree-sitter.wasm public && cp node_modules/hs2js/dist/tree-sitter-haskell.wasm public"
+  }
+}
+```
+
+Depending on your setup, replace `public` with the folder that will serve your assets to `/`. Then install the package:
+
+```sh
+npm i hs2js
+```
+
+and use it:
+
+```js
+import * as hs2js from 'hs2js';
+hs2js.loadParser();
+document.getElementById('hello').addEventListener('click', () => {
+  hs2js.evaluate('alert "hello from haskell!"');
+});
+```
+
+## API
+
+These are all functions exported by the package:
+
+### evaluate
+
+Evaluates a piece of haskell code
+
+- `code`: [valid](https://github.com/tree-sitter/tree-sitter-haskell?tab=readme-ov-file#supported-language-extensions) haskell code
+- `scope`: global scope, defaults to globalThis. Allows you to pass an object of your own functions / variables from JS to Haskell.
+- `ops`: mapping for custom infix operator
+
+Example:
+
+```js
+// simple
+hs2js.evaluate(`2 + 2`) // = 4
+// passing variables via scope:
+hs2js.evaluate(`a + b`, { a: 1, b: 2 }) // = 3
+// custom operator
+hs2js.evaluate(`2 |* 3`, {}, { '|*': (l, r) => l * r }) // = 6
+```
+
+### parse
+
+[Parses](https://github.com/tree-sitter/tree-sitter-haskell) a piece of haskell code, returning its AST representation.
+
+Example:
+
+```js
+const ast = hs2js.parse(`2 + 2`)
+console.log(ast.toString())
+// (haskell declarations: (declarations (top_splice (apply function: (variable) argument: (literal (integer))))))
+```
+
+### run
+
+Evaluates `rootNode` of haskell AST (used by evaluate internally).
+
+- `rootNode`: haskell AST root node, as returned by `parse`
+- `scope`: see evaluate
+- `ops`: see evaluate
+
+Example:
+
+```js
+const ast = hs2js.parse(`2 + 3`);
+const res = hs2js.run(ast.rootNode);
+console.log(res); // = 5
+```
+
+### loadParser
+
+Loads and caches the parser by fetching `tree-sitter.wasm` and `tree-sitter-haskell.wasm`.
+Make sure to call and await this function before calling `parse` or `evaluate`.
+
+```js
+hs2js.loadParser().then(() => hs2js.evaluate('alert "ready"'))
+```
+
+### setBase
+
+Sets the base path where the WASM files are expected by `loadParser`. Defaults to `/`.
+Expects `tree-sitter.wasm` and `tree-sitter-haskell.wasm` to be present.
+Can either be a relative path or a URL.
+
+```js
+hs2js.setBase('https://unpkg.com/hs2js@0.0.4/dist/');
+hs2js.loadParser(); 
+/* loads 
+- https://unpkg.com/hs2js@0.0.4/dist/tree-sitter.wasm
+- https://unpkg.com/hs2js@0.0.4/dist/tree-sitter-haskell.wasm
+*/
+```
diff --git a/packages/hs2js/package.json b/packages/hs2js/package.json
new file mode 100644
index 00000000..09bf1e05
--- /dev/null
+++ b/packages/hs2js/package.json
@@ -0,0 +1,37 @@
+{
+  "name": "hs2js",
+  "version": "0.1.0",
+  "description": "Experimental Haskell in JavaScript interpreter",
+  "main": "src/index.mjs",
+  "type": "module",
+  "publishConfig": {
+    "main": "dist/index.js",
+    "module": "dist/index.mjs"
+  },
+  "scripts": {
+    "build-wasm": "tree-sitter build-wasm node_modules/tree-sitter-haskell && mv tree-sitter-haskell.wasm ./dist/ && cp node_modules/web-tree-sitter/tree-sitter.wasm ./dist/",
+    "build": "vite build && npm run build-wasm",
+    "prepublishOnly": "npm run build"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/tidalcycles/strudel.git"
+  },
+  "keywords": [
+    "haskell",
+    "javascript"
+  ],
+  "author": "Felix Roos ",
+  "license": "AGPL-3.0-or-later",
+  "bugs": {
+    "url": "https://github.com/tidalcycles/strudel/issues"
+  },
+  "homepage": "https://github.com/tidalcycles/strudel",
+  "dependencies": {
+    "web-tree-sitter": "^0.20.8"
+  },
+  "devDependencies": {
+    "tree-sitter-haskell": "^0.21.0",
+    "vite": "^5.0.10"
+  }
+}
diff --git a/packages/hs2js/pnpm-lock.yaml b/packages/hs2js/pnpm-lock.yaml
new file mode 100644
index 00000000..9043fd41
--- /dev/null
+++ b/packages/hs2js/pnpm-lock.yaml
@@ -0,0 +1,520 @@
+lockfileVersion: '6.0'
+
+settings:
+  autoInstallPeers: true
+  excludeLinksFromLockfile: false
+
+dependencies:
+  web-tree-sitter:
+    specifier: ^0.20.8
+    version: 0.20.8
+
+devDependencies:
+  tree-sitter-haskell:
+    specifier: ^0.21.0
+    version: 0.21.0(tree-sitter@0.21.1)
+  vite:
+    specifier: ^5.0.10
+    version: 5.2.11
+
+packages:
+
+  /@esbuild/aix-ppc64@0.20.2:
+    resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==}
+    engines: {node: '>=12'}
+    cpu: [ppc64]
+    os: [aix]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/android-arm64@0.20.2:
+    resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [android]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/android-arm@0.20.2:
+    resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==}
+    engines: {node: '>=12'}
+    cpu: [arm]
+    os: [android]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/android-x64@0.20.2:
+    resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [android]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/darwin-arm64@0.20.2:
+    resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [darwin]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/darwin-x64@0.20.2:
+    resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [darwin]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/freebsd-arm64@0.20.2:
+    resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [freebsd]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/freebsd-x64@0.20.2:
+    resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [freebsd]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-arm64@0.20.2:
+    resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-arm@0.20.2:
+    resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==}
+    engines: {node: '>=12'}
+    cpu: [arm]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-ia32@0.20.2:
+    resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==}
+    engines: {node: '>=12'}
+    cpu: [ia32]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-loong64@0.20.2:
+    resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==}
+    engines: {node: '>=12'}
+    cpu: [loong64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-mips64el@0.20.2:
+    resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==}
+    engines: {node: '>=12'}
+    cpu: [mips64el]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-ppc64@0.20.2:
+    resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==}
+    engines: {node: '>=12'}
+    cpu: [ppc64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-riscv64@0.20.2:
+    resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==}
+    engines: {node: '>=12'}
+    cpu: [riscv64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-s390x@0.20.2:
+    resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==}
+    engines: {node: '>=12'}
+    cpu: [s390x]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/linux-x64@0.20.2:
+    resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/netbsd-x64@0.20.2:
+    resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [netbsd]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/openbsd-x64@0.20.2:
+    resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [openbsd]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/sunos-x64@0.20.2:
+    resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [sunos]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/win32-arm64@0.20.2:
+    resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==}
+    engines: {node: '>=12'}
+    cpu: [arm64]
+    os: [win32]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/win32-ia32@0.20.2:
+    resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==}
+    engines: {node: '>=12'}
+    cpu: [ia32]
+    os: [win32]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@esbuild/win32-x64@0.20.2:
+    resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==}
+    engines: {node: '>=12'}
+    cpu: [x64]
+    os: [win32]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@rollup/rollup-android-arm-eabi@4.17.2:
+    resolution: {integrity: sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==}
+    cpu: [arm]
+    os: [android]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@rollup/rollup-android-arm64@4.17.2:
+    resolution: {integrity: sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==}
+    cpu: [arm64]
+    os: [android]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@rollup/rollup-darwin-arm64@4.17.2:
+    resolution: {integrity: sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==}
+    cpu: [arm64]
+    os: [darwin]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@rollup/rollup-darwin-x64@4.17.2:
+    resolution: {integrity: sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==}
+    cpu: [x64]
+    os: [darwin]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@rollup/rollup-linux-arm-gnueabihf@4.17.2:
+    resolution: {integrity: sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==}
+    cpu: [arm]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@rollup/rollup-linux-arm-musleabihf@4.17.2:
+    resolution: {integrity: sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==}
+    cpu: [arm]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@rollup/rollup-linux-arm64-gnu@4.17.2:
+    resolution: {integrity: sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==}
+    cpu: [arm64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@rollup/rollup-linux-arm64-musl@4.17.2:
+    resolution: {integrity: sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==}
+    cpu: [arm64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@rollup/rollup-linux-powerpc64le-gnu@4.17.2:
+    resolution: {integrity: sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==}
+    cpu: [ppc64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@rollup/rollup-linux-riscv64-gnu@4.17.2:
+    resolution: {integrity: sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==}
+    cpu: [riscv64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@rollup/rollup-linux-s390x-gnu@4.17.2:
+    resolution: {integrity: sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==}
+    cpu: [s390x]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@rollup/rollup-linux-x64-gnu@4.17.2:
+    resolution: {integrity: sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==}
+    cpu: [x64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@rollup/rollup-linux-x64-musl@4.17.2:
+    resolution: {integrity: sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==}
+    cpu: [x64]
+    os: [linux]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@rollup/rollup-win32-arm64-msvc@4.17.2:
+    resolution: {integrity: sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==}
+    cpu: [arm64]
+    os: [win32]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@rollup/rollup-win32-ia32-msvc@4.17.2:
+    resolution: {integrity: sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==}
+    cpu: [ia32]
+    os: [win32]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@rollup/rollup-win32-x64-msvc@4.17.2:
+    resolution: {integrity: sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==}
+    cpu: [x64]
+    os: [win32]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /@types/estree@1.0.5:
+    resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
+    dev: true
+
+  /esbuild@0.20.2:
+    resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==}
+    engines: {node: '>=12'}
+    hasBin: true
+    requiresBuild: true
+    optionalDependencies:
+      '@esbuild/aix-ppc64': 0.20.2
+      '@esbuild/android-arm': 0.20.2
+      '@esbuild/android-arm64': 0.20.2
+      '@esbuild/android-x64': 0.20.2
+      '@esbuild/darwin-arm64': 0.20.2
+      '@esbuild/darwin-x64': 0.20.2
+      '@esbuild/freebsd-arm64': 0.20.2
+      '@esbuild/freebsd-x64': 0.20.2
+      '@esbuild/linux-arm': 0.20.2
+      '@esbuild/linux-arm64': 0.20.2
+      '@esbuild/linux-ia32': 0.20.2
+      '@esbuild/linux-loong64': 0.20.2
+      '@esbuild/linux-mips64el': 0.20.2
+      '@esbuild/linux-ppc64': 0.20.2
+      '@esbuild/linux-riscv64': 0.20.2
+      '@esbuild/linux-s390x': 0.20.2
+      '@esbuild/linux-x64': 0.20.2
+      '@esbuild/netbsd-x64': 0.20.2
+      '@esbuild/openbsd-x64': 0.20.2
+      '@esbuild/sunos-x64': 0.20.2
+      '@esbuild/win32-arm64': 0.20.2
+      '@esbuild/win32-ia32': 0.20.2
+      '@esbuild/win32-x64': 0.20.2
+    dev: true
+
+  /fsevents@2.3.3:
+    resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+    engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+    os: [darwin]
+    requiresBuild: true
+    dev: true
+    optional: true
+
+  /nanoid@3.3.7:
+    resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
+    engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+    hasBin: true
+    dev: true
+
+  /node-addon-api@8.0.0:
+    resolution: {integrity: sha512-ipO7rsHEBqa9STO5C5T10fj732ml+5kLN1cAG8/jdHd56ldQeGj3Q7+scUS+VHK/qy1zLEwC4wMK5+yM0btPvw==}
+    engines: {node: ^18 || ^20 || >= 21}
+    dev: true
+
+  /node-gyp-build@4.8.1:
+    resolution: {integrity: sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==}
+    hasBin: true
+    dev: true
+
+  /picocolors@1.0.1:
+    resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==}
+    dev: true
+
+  /postcss@8.4.38:
+    resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==}
+    engines: {node: ^10 || ^12 || >=14}
+    dependencies:
+      nanoid: 3.3.7
+      picocolors: 1.0.1
+      source-map-js: 1.2.0
+    dev: true
+
+  /rollup@4.17.2:
+    resolution: {integrity: sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==}
+    engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+    hasBin: true
+    dependencies:
+      '@types/estree': 1.0.5
+    optionalDependencies:
+      '@rollup/rollup-android-arm-eabi': 4.17.2
+      '@rollup/rollup-android-arm64': 4.17.2
+      '@rollup/rollup-darwin-arm64': 4.17.2
+      '@rollup/rollup-darwin-x64': 4.17.2
+      '@rollup/rollup-linux-arm-gnueabihf': 4.17.2
+      '@rollup/rollup-linux-arm-musleabihf': 4.17.2
+      '@rollup/rollup-linux-arm64-gnu': 4.17.2
+      '@rollup/rollup-linux-arm64-musl': 4.17.2
+      '@rollup/rollup-linux-powerpc64le-gnu': 4.17.2
+      '@rollup/rollup-linux-riscv64-gnu': 4.17.2
+      '@rollup/rollup-linux-s390x-gnu': 4.17.2
+      '@rollup/rollup-linux-x64-gnu': 4.17.2
+      '@rollup/rollup-linux-x64-musl': 4.17.2
+      '@rollup/rollup-win32-arm64-msvc': 4.17.2
+      '@rollup/rollup-win32-ia32-msvc': 4.17.2
+      '@rollup/rollup-win32-x64-msvc': 4.17.2
+      fsevents: 2.3.3
+    dev: true
+
+  /source-map-js@1.2.0:
+    resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
+    engines: {node: '>=0.10.0'}
+    dev: true
+
+  /tree-sitter-haskell@0.21.0(tree-sitter@0.21.1):
+    resolution: {integrity: sha512-b2RLegPHuYPh7nJ3YKWgkWnFYxmYlQDE8TDJuNH+iuNuBcCMYyaA9JlJlMHfCvf7DmJNPtqqbO9Kh9NXEmbatQ==}
+    requiresBuild: true
+    peerDependencies:
+      tree-sitter: ^0.21.0
+      tree_sitter: '*'
+    peerDependenciesMeta:
+      tree_sitter:
+        optional: true
+    dependencies:
+      node-addon-api: 8.0.0
+      node-gyp-build: 4.8.1
+      tree-sitter: 0.21.1
+    dev: true
+
+  /tree-sitter@0.21.1:
+    resolution: {integrity: sha512-7dxoA6kYvtgWw80265MyqJlkRl4yawIjO7S5MigytjELkX43fV2WsAXzsNfO7sBpPPCF5Gp0+XzHk0DwLCq3xQ==}
+    requiresBuild: true
+    dependencies:
+      node-addon-api: 8.0.0
+      node-gyp-build: 4.8.1
+    dev: true
+
+  /vite@5.2.11:
+    resolution: {integrity: sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==}
+    engines: {node: ^18.0.0 || >=20.0.0}
+    hasBin: true
+    peerDependencies:
+      '@types/node': ^18.0.0 || >=20.0.0
+      less: '*'
+      lightningcss: ^1.21.0
+      sass: '*'
+      stylus: '*'
+      sugarss: '*'
+      terser: ^5.4.0
+    peerDependenciesMeta:
+      '@types/node':
+        optional: true
+      less:
+        optional: true
+      lightningcss:
+        optional: true
+      sass:
+        optional: true
+      stylus:
+        optional: true
+      sugarss:
+        optional: true
+      terser:
+        optional: true
+    dependencies:
+      esbuild: 0.20.2
+      postcss: 8.4.38
+      rollup: 4.17.2
+    optionalDependencies:
+      fsevents: 2.3.3
+    dev: true
+
+  /web-tree-sitter@0.20.8:
+    resolution: {integrity: sha512-weOVgZ3aAARgdnb220GqYuh7+rZU0Ka9k9yfKtGAzEYMa6GgiCzW9JjQRJyCJakvibQW+dfjJdihjInKuuCAUQ==}
+    dev: false
diff --git a/packages/hs2js/src/hs2js.mjs b/packages/hs2js/src/hs2js.mjs
new file mode 100644
index 00000000..227a42b2
--- /dev/null
+++ b/packages/hs2js/src/hs2js.mjs
@@ -0,0 +1,136 @@
+import { parse } from './parser.mjs';
+
+function runApply(node, scope, ops) {
+  if (node.children.length !== 2)
+    throw new Error(`expected 2 children for node type apply, got ${node.children.length}`);
+  const [fn, arg] = node.children.map((child) => run(child, scope, ops));
+  if (typeof fn !== 'function') {
+    throw new Error(`${node.children[0].text} is not a function`);
+  }
+  // only works if fn is curried!
+  return fn(arg);
+}
+
+function runInfix(left, symbol, right, ops) {
+  const customOp = ops[symbol];
+  if (customOp) {
+    return customOp(left, right);
+  }
+  switch (symbol) {
+    case '+':
+      return left + right;
+    case '-':
+      return left - right;
+    case '*':
+      return left * right;
+    case '/':
+      return left / right;
+    case '$':
+      return left(right);
+    case '&':
+      console.log('right', right);
+      return right(left);
+    case '.':
+      return (x) => left(right(x));
+    default:
+      throw new Error('unexpected infix operator ' + symbol);
+  }
+}
+
+function curry(patterns, body, scope, ops) {
+  const [variable, ...rest] = patterns;
+  return (arg) => {
+    let _scope = { ...scope, [variable.text]: arg };
+    if (patterns.length === 1) {
+      const result = run(body, _scope, ops);
+      return result;
+    }
+    return curry(rest, body, _scope, ops);
+  };
+}
+
+export function run(node, scope, ops = {}) {
+  let runInScope = (node, scp = scope) => run(node, scp, ops);
+  //console.log("node", node.type, node.text);
+  if (ops[node.type]) {
+    return ops[node.type](node);
+  }
+  switch (node.type) {
+    case 'ERROR':
+      throw new Error(`invalid syntax: "${node.text}"`);
+    case 'declarations':
+      let result;
+      node.children.forEach((declaration) => {
+        result = runInScope(declaration);
+      });
+      return result;
+    case 'integer':
+      return Number(node.text);
+    case 'float':
+      return Number(node.text);
+    case 'string':
+      const str = node.text.slice(1, -1);
+      return String(str);
+    case 'lambda':
+      const [_, lpatterns, __, lbody] = node.children;
+      return curry(lpatterns.children, lbody, scope, ops);
+    case 'function':
+      const [fvariable, fpatterns, fbody] = node.children;
+      scope[fvariable.text] = curry(fpatterns.children, fbody, scope, ops);
+      return scope[fvariable.text];
+    case 'list': {
+      return node.children
+        .filter((_, i) => i % 2 === 1) // elements are at odd indices
+        .map((node) => runInScope(node));
+    }
+    case 'match':
+      if (node.children[0].text !== '=' || node.children.length !== 2) {
+        throw new Error('match node so far only support simple assignments');
+      }
+      return runInScope(node.children[1]);
+    case 'bind':
+      if (node.children.length !== 2) throw new Error('expected 2 children for node type bind');
+      if (node.children[0].type !== 'variable') throw new Error('expected variable as first child of bind node');
+      if (node.children[1].type !== 'match') throw new Error('expected match as first child of bind node');
+      const [bvariable, bmatch] = node.children;
+      const value = runInScope(bmatch);
+      scope[bvariable.text] = value;
+      return value;
+    case 'variable':
+      return scope[node.text];
+    case 'infix': {
+      const [a, op, b] = node.children;
+      const symbol = op.text;
+      const [left, right] = [runInScope(a), runInScope(b)];
+      return runInfix(left, symbol, right, ops);
+    }
+    case 'apply':
+      return runApply(node, scope, ops);
+    case 'left_section': {
+      const [_, b, op] = node.children;
+      const right = runInScope(b);
+      return (left) => runInfix(left, op.text, right, ops);
+    }
+    case 'right_section': {
+      const [_, op, b] = node.children;
+      const right = runInScope(b);
+      return (left) => runInfix(left, op.text, right, ops);
+    }
+    case 'parens':
+      if (node.children.length !== 3) throw new Error('expected 3 children for node type parens');
+      return runInScope(node.children[1]);
+    default:
+      if (node.children.length === 0) {
+        throw new Error('unhandled leaf type ' + node.type);
+      }
+      if (node.children.length > 1) {
+        throw new Error('unhandled branch type ' + node.type);
+      }
+      return runInScope(node.children[0]);
+  }
+}
+
+export function evaluate(haskellCode, scope = globalThis, ops) {
+  const ast = parse(haskellCode);
+  return run(ast.rootNode, scope, ops);
+}
diff --git a/packages/hs2js/src/index.mjs b/packages/hs2js/src/index.mjs
new file mode 100644
index 00000000..c3aab230
--- /dev/null
+++ b/packages/hs2js/src/index.mjs
@@ -0,0 +1,2 @@
+export * from './hs2js.mjs';
+export * from './parser.mjs';
diff --git a/packages/hs2js/src/parser.mjs b/packages/hs2js/src/parser.mjs
new file mode 100644
index 00000000..a5b010b4
--- /dev/null
+++ b/packages/hs2js/src/parser.mjs
@@ -0,0 +1,37 @@
+import Parser from 'web-tree-sitter';
+
+let base = '/';
+export function setBase(path) {
+  base = path;
+}
+
+let isReady = false,
+  parser;
+async function _loadParser() {
+  await Parser.init({
+    locateFile(scriptName, scriptDirectory) {
+      return `${base}${scriptName}`;
+    },
+  });
+  parser = new Parser();
+  const Lang = await Parser.Language.load(`${base}tree-sitter-haskell.wasm`);
+  parser.setLanguage(Lang);
+  isReady = true;
+  return parser;
+}
+
+let parserLoaded;
+export function loadParser() {
+  if (!parserLoaded) {
+    parserLoaded = _loadParser();
+  }
+  return parserLoaded;
+}
+
+export function parse(code) {
+  if (!isReady) {
+    throw new Error('hs2js not ready. await loadParser before calling evaluate or parse functions');
+  }
+  // for some reason, the parser doesn't like new lines..
+  return parser.parse(code.replaceAll('\n\n', '~~~~').replaceAll('\n', ' ').replaceAll('~~~~', ' \n'));
+}
diff --git a/packages/hs2js/vite.config.js b/packages/hs2js/vite.config.js
new file mode 100644
index 00000000..ce715712
--- /dev/null
+++ b/packages/hs2js/vite.config.js
@@ -0,0 +1,20 @@
+import { defineConfig } from 'vite';
+import { resolve } from 'path';
+
+// https://vitejs.dev/config/
+export default defineConfig({
+  plugins: [],
+  build: {
+    lib: {
+      entry: resolve(__dirname, 'src', 'index.mjs'),
+      name: 'hs2js',
+      formats: ['es', 'iife'],
+      fileName: (ext) => ({ es: 'index.mjs', iife: 'index.js' })[ext],
+    },
+    rollupOptions: {
+      // external: [...Object.keys(dependencies)],
+      plugins: [],
+    },
+    target: 'esnext',
+  },
+});
diff --git a/packages/hydra/hydra.mjs b/packages/hydra/hydra.mjs
index 13d08de6..2cb265c2 100644
--- a/packages/hydra/hydra.mjs
+++ b/packages/hydra/hydra.mjs
@@ -1,5 +1,5 @@
 import { getDrawContext } from '@strudel/draw';
-import { controls } from '@strudel/core';
+import { controls, getTime, reify } from '@strudel/core';
 
 let latestOptions;
 let hydra;
@@ -27,6 +27,7 @@ export async function initHydra(options = {}) {
     hydraConfig.canvas = canvas;
 
     await import(/* @vite-ignore */ src);
+    /* eslint-disable-next-line */
     hydra = new Hydra(hydraConfig);
     if (feedStrudel) {
       const { canvas } = getDrawContext();
@@ -46,4 +47,4 @@ export function clearHydra() {
   globalThis.shape = controls.shape;
 }
 
-export const H = (p) => () => p.queryArc(getTime(), getTime())[0].value;
+export const H = (p) => () => reify(p).queryArc(getTime(), getTime())[0].value;
diff --git a/packages/hydra/package.json b/packages/hydra/package.json
index 77fab126..2559a167 100644
--- a/packages/hydra/package.json
+++ b/packages/hydra/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@strudel/hydra",
-  "version": "1.0.1",
+  "version": "1.1.0",
   "description": "Hydra integration for strudel",
   "main": "hydra.mjs",
   "type": "module",
diff --git a/packages/midi/midi.mjs b/packages/midi/midi.mjs
index 3ce894d6..32e66f6c 100644
--- a/packages/midi/midi.mjs
+++ b/packages/midi/midi.mjs
@@ -169,13 +169,18 @@ const refs = {};
 export async function midin(input) {
   if (isPattern(input)) {
     throw new Error(
-      `.midi does not accept Pattern input. Make sure to pass device name with single quotes. Example: .midi('${
+      `midin: does not accept Pattern as input. Make sure to pass device name with single quotes. Example: midin('${
         WebMidi.outputs?.[0]?.name || 'IAC Driver Bus 1'
       }')`,
     );
   }
   const initial = await enableWebMidi(); // only returns on first init
   const device = getDevice(input, WebMidi.inputs);
+  if (!device) {
+    throw new Error(
+      `midiin: device "${input}" not found.. connected devices: ${getMidiDeviceNamesString(WebMidi.inputs)}`,
+    );
+  }
   if (initial) {
     const otherInputs = WebMidi.inputs.filter((o) => o.name !== device.name);
     logger(
diff --git a/packages/midi/package.json b/packages/midi/package.json
index 4cc2dddb..6b2d8de1 100644
--- a/packages/midi/package.json
+++ b/packages/midi/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@strudel/midi",
-  "version": "1.0.1",
+  "version": "1.1.0",
   "description": "Midi API for strudel",
   "main": "index.mjs",
   "type": "module",
diff --git a/packages/mini/krill-parser.js b/packages/mini/krill-parser.js
index 1cdd3486..0a062f46 100644
--- a/packages/mini/krill-parser.js
+++ b/packages/mini/krill-parser.js
@@ -295,13 +295,12 @@ function peg$parse(input, options) {
   var peg$f6 = function(a) { return a };
   var peg$f7 = function(s) { s.arguments_.alignment = 'polymeter_slowcat'; return s; };
   var peg$f8 = function(a) { return x => x.options_['weight'] = (x.options_['weight'] ?? 1) + (a ?? 2) - 1 };
-  var peg$f9 = function(a) { return x => {const reps = (x.options_['reps'] ?? 1) + (a ?? 2) - 1;
+  var peg$f9 = function(a) { return x => {// A bit fiddly, to support both x!4 and x!!! as equivalent..
+                 const reps = (x.options_['reps'] ?? 1) + (a ?? 2) - 1;
                  x.options_['reps'] = reps;
-                 console.log("reps: ", reps)
                  x.options_['ops'] = x.options_['ops'].filter(x => x.type_ !== "replicate");
                  x.options_['ops'].push({ type_: "replicate", arguments_ :{ amount:reps }});
                  x.options_['weight'] = reps;
-                 console.log("options: ", x.options_);
                 }
   };
   var peg$f10 = function(p, s, r) { return x => x.options_['ops'].push({ type_: "bjorklund", arguments_ :{ pulse: p, step:s, rotation:r }}) };
diff --git a/packages/mini/mini.mjs b/packages/mini/mini.mjs
index 8d2276fb..86c372b8 100644
--- a/packages/mini/mini.mjs
+++ b/packages/mini/mini.mjs
@@ -14,7 +14,7 @@ const applyOptions = (parent, enter) => (pat, i) => {
   const ast = parent.source_[i];
   const options = ast.options_;
   const ops = options?.ops;
-
+  const tactus_source = pat.__tactus_source;
   if (ops) {
     for (const op of ops) {
       switch (op.type_) {
@@ -69,7 +69,7 @@ const applyOptions = (parent, enter) => (pat, i) => {
       }
     }
   }
-
+  pat.__tactus_source = pat.__tactus_source || tactus_source;
   return pat;
 };
 
diff --git a/packages/mini/package.json b/packages/mini/package.json
index 7bd73011..c10ddc65 100644
--- a/packages/mini/package.json
+++ b/packages/mini/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@strudel/mini",
-  "version": "1.0.1",
+  "version": "1.1.0",
   "description": "Mini notation for strudel",
   "main": "index.mjs",
   "type": "module",
@@ -37,6 +37,6 @@
   "devDependencies": {
     "peggy": "^3.0.2",
     "vite": "^5.0.10",
-    "vitest": "^1.1.0"
+    "vitest": "^2.1.3"
   }
 }
diff --git a/packages/mini/test/mini.test.mjs b/packages/mini/test/mini.test.mjs
index 92aa6c12..112edcb7 100644
--- a/packages/mini/test/mini.test.mjs
+++ b/packages/mini/test/mini.test.mjs
@@ -210,12 +210,14 @@ describe('mini', () => {
   });
   it('supports ^ tactus marking', () => {
     expect(mini('a [^b c]').tactus).toEqual(Fraction(4));
+    expect(mini('[^b c]!3').tactus).toEqual(Fraction(6));
     expect(mini('[a b c] [d [e f]]').tactus).toEqual(Fraction(2));
     expect(mini('^[a b c] [d [e f]]').tactus).toEqual(Fraction(2));
     expect(mini('[a b c] [d [^e f]]').tactus).toEqual(Fraction(8));
     expect(mini('[a b c] [^d [e f]]').tactus).toEqual(Fraction(4));
     expect(mini('[^a b c] [^d [e f]]').tactus).toEqual(Fraction(12));
     expect(mini('[^a b c] [d [^e f]]').tactus).toEqual(Fraction(24));
+    expect(mini('[^a b c d e]').tactus).toEqual(Fraction(5));
   });
 });
 
diff --git a/packages/mqtt/README.md b/packages/mqtt/README.md
new file mode 100644
index 00000000..7952b553
--- /dev/null
+++ b/packages/mqtt/README.md
@@ -0,0 +1,3 @@
+# @strudel/serial
+
+This package adds webserial functionality to strudel Patterns, for e.g. sending messages to arduino microcontrollers.
diff --git a/packages/mqtt/mqtt.mjs b/packages/mqtt/mqtt.mjs
new file mode 100644
index 00000000..75f7904e
--- /dev/null
+++ b/packages/mqtt/mqtt.mjs
@@ -0,0 +1,87 @@
+/*
+mqtt.mjs - for patterning the internet of things from strudel
+Copyright (C) 2022 Strudel contributors - see 
+This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program.  If not, see .
+*/
+
+import { Pattern, isPattern } from '@strudel/core';
+import Paho from 'paho-mqtt';
+
+const connections = {};
+
+// Handle connection loss
+function onConnectionLost(responseObject) {
+  if (responseObject.errorCode !== 0) {
+    console.error(' mqtt connection lost: ', responseObject.errorMessage);
+  }
+}
+
+// Handle received messages
+function onMessageArrived(message) {
+  console.log('incoming mqtt message: ', message.payloadString); // prettier-ignore
+}
+
+function onFailure(err) {
+  console.error('Connection failed: ', err);
+}
+
+Pattern.prototype.mqtt = function (
+  username = undefined,
+  password = undefined,
+  topic = undefined,
+  host = 'wss://localhost:8883/',
+  client = undefined,
+  latency = 0,
+) {
+  const key = host + '-' + client;
+  let connected = false;
+  if (!client) {
+    client = 'strudel-' + String(Math.floor(Math.random() * 1000000));
+  }
+  function onConnect() {
+    console.log('Connected to mqtt broker');
+    connected = true;
+  }
+
+  let cx;
+  if (connections[key]) {
+    cx = connections[key];
+  } else {
+    cx = new Paho.Client(host, client);
+    cx.onConnectionLost = onConnectionLost;
+    cx.onMessageArrived = onMessageArrived;
+    const props = {
+      onSuccess: onConnect,
+      onFailure: onFailure,
+      useSSL: true,
+    };
+
+    if (username) {
+      props.userName = username;
+      props.password = password;
+    }
+    cx.connect(props);
+  }
+  return this.withHap((hap) => {
+    const onTrigger = (t_deprecate, hap, currentTime, cps, targetTime) => {
+      if (!connected) {
+        return;
+      }
+      let message = '';
+      if (typeof hap.value === 'object') {
+        message = JSON.stringify(hap.value);
+      } else {
+        message = hap.value;
+      }
+      message = new Paho.Message(message);
+      message.destinationName = topic;
+
+      const offset = (targetTime - currentTime + latency) * 1000;
+
+      window.setTimeout(function () {
+        cx.send(message);
+      }, offset);
+    };
+    return hap.setContext({ ...hap.context, onTrigger, dominantTrigger: true });
+  });
+};
diff --git a/packages/mqtt/package.json b/packages/mqtt/package.json
new file mode 100644
index 00000000..b6be50f5
--- /dev/null
+++ b/packages/mqtt/package.json
@@ -0,0 +1,38 @@
+{
+  "name": "@strudel/mqtt",
+  "version": "1.1.0",
+  "description": "MQTT API for strudel",
+  "main": "mqtt.mjs",
+  "type": "module",
+  "publishConfig": {
+    "main": "dist/index.mjs"
+  },
+  "scripts": {
+    "build": "vite build",
+    "prepublishOnly": "npm run build"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/tidalcycles/strudel.git"
+  },
+  "keywords": [
+    "titdalcycles",
+    "strudel",
+    "pattern",
+    "livecoding",
+    "algorave"
+  ],
+  "author": "Alex McLean ",
+  "license": "AGPL-3.0-or-later",
+  "bugs": {
+    "url": "https://github.com/tidalcycles/strudel/issues"
+  },
+  "homepage": "https://github.com/tidalcycles/strudel#readme",
+  "dependencies": {
+    "@strudel/core": "workspace:*",
+    "paho-mqtt": "^1.1.0"
+  },
+  "devDependencies": {
+    "vite": "^5.0.10"
+  }
+}
diff --git a/packages/mqtt/vite.config.js b/packages/mqtt/vite.config.js
new file mode 100644
index 00000000..b45b7ca6
--- /dev/null
+++ b/packages/mqtt/vite.config.js
@@ -0,0 +1,19 @@
+import { defineConfig } from 'vite';
+import { dependencies } from './package.json';
+import { resolve } from 'path';
+
+// https://vitejs.dev/config/
+export default defineConfig({
+  plugins: [],
+  build: {
+    lib: {
+      entry: resolve(__dirname, 'mqtt.mjs'),
+      formats: ['es'],
+      fileName: (ext) => ({ es: 'index.mjs' })[ext],
+    },
+    rollupOptions: {
+      external: [...Object.keys(dependencies)],
+    },
+    target: 'esnext',
+  },
+});
diff --git a/packages/osc/osc.mjs b/packages/osc/osc.mjs
index 422e56da..4b9ab14e 100644
--- a/packages/osc/osc.mjs
+++ b/packages/osc/osc.mjs
@@ -6,7 +6,7 @@ This program is free software: you can redistribute it and/or modify it under th
 
 import OSC from 'osc-js';
 
-import { logger, parseNumeral, Pattern, getEventOffsetMs, isNote, noteToMidi } from '@strudel/core';
+import { logger, parseNumeral, Pattern, isNote, noteToMidi, ClockCollator } from '@strudel/core';
 
 let connection; // Promise
 function connect() {
@@ -34,6 +34,44 @@ function connect() {
   return connection;
 }
 
+export function parseControlsFromHap(hap, cps) {
+  hap.ensureObjectValue();
+  const cycle = hap.wholeOrPart().begin.valueOf();
+  const delta = hap.duration.valueOf();
+  const controls = Object.assign({}, { cps, cycle, delta }, hap.value);
+  // make sure n and note are numbers
+  controls.n && (controls.n = parseNumeral(controls.n));
+  if (typeof controls.note !== 'undefined') {
+    if (isNote(controls.note)) {
+      controls.midinote = noteToMidi(controls.note, controls.octave || 3);
+    } else {
+      controls.note = parseNumeral(controls.note);
+    }
+  }
+  controls.bank && (controls.s = controls.bank + controls.s);
+  controls.roomsize && (controls.size = parseNumeral(controls.roomsize));
+  // speed adjustment for CPS is handled on the DSP side in superdirt and pattern side in Strudel,
+  // so we need to undo the adjustment before sending the message to superdirt.
+  controls.unit === 'c' && controls.speed != null && (controls.speed = controls.speed / cps);
+  const channels = controls.channels;
+  channels != undefined && (controls.channels = JSON.stringify(channels));
+  return controls;
+}
+
+const collator = new ClockCollator({});
+
+export async function oscTrigger(t_deprecate, hap, currentTime, cps = 1, targetTime) {
+  const osc = await connect();
+  const controls = parseControlsFromHap(hap, cps);
+  const keyvals = Object.entries(controls).flat();
+
+  const ts = Math.round(collator.calculateTimestamp(currentTime, targetTime) * 1000);
+  const message = new OSC.Message('/dirt/play', ...keyvals);
+  const bundle = new OSC.Bundle([message], ts);
+  bundle.timestamp(ts); // workaround for https://github.com/adzialocha/osc-js/issues/60
+  osc.send(bundle);
+}
+
 /**
  *
  * Sends each hap as an OSC message, which can be picked up by SuperCollider or any other OSC-enabled software.
@@ -44,33 +82,5 @@ function connect() {
  * @returns Pattern
  */
 Pattern.prototype.osc = function () {
-  return this.onTrigger(async (time, hap, currentTime, cps = 1, targetTime) => {
-    hap.ensureObjectValue();
-    const osc = await connect();
-    const cycle = hap.wholeOrPart().begin.valueOf();
-    const delta = hap.duration.valueOf();
-    const controls = Object.assign({}, { cps, cycle, delta }, hap.value);
-    // make sure n and note are numbers
-    controls.n && (controls.n = parseNumeral(controls.n));
-    if (typeof controls.note !== 'undefined') {
-      if (isNote(controls.note)) {
-        controls.midinote = noteToMidi(controls.note, controls.octave || 3);
-      } else {
-        controls.note = parseNumeral(controls.note);
-      }
-    }
-    controls.bank && (controls.s = controls.bank + controls.s);
-    controls.roomsize && (controls.size = parseNumeral(controls.roomsize));
-    const keyvals = Object.entries(controls).flat();
-    // time should be audio time of onset
-    // currentTime should be current time of audio context (slightly before time)
-    const offset = getEventOffsetMs(targetTime, currentTime);
-
-    // timestamp in milliseconds used to trigger the osc bundle at a precise moment
-    const ts = Math.floor(Date.now() + offset);
-    const message = new OSC.Message('/dirt/play', ...keyvals);
-    const bundle = new OSC.Bundle([message], ts);
-    bundle.timestamp(ts); // workaround for https://github.com/adzialocha/osc-js/issues/60
-    osc.send(bundle);
-  });
+  return this.onTrigger(oscTrigger);
 };
diff --git a/packages/osc/package.json b/packages/osc/package.json
index 92725cd4..98babe2a 100644
--- a/packages/osc/package.json
+++ b/packages/osc/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@strudel/osc",
-  "version": "1.0.1",
+  "version": "1.1.0",
   "description": "OSC messaging for strudel",
   "main": "osc.mjs",
   "type": "module",
diff --git a/packages/osc/superdirtoutput.js b/packages/osc/superdirtoutput.js
new file mode 100644
index 00000000..3f48e66b
--- /dev/null
+++ b/packages/osc/superdirtoutput.js
@@ -0,0 +1,10 @@
+import { oscTriggerTauri } from '../desktopbridge/oscbridge.mjs';
+import { isTauri } from '../desktopbridge/utils.mjs';
+import { oscTrigger } from './osc.mjs';
+
+const trigger = isTauri() ? oscTriggerTauri : oscTrigger;
+
+export const superdirtOutput = (hap, deadline, hapDuration, cps, targetTime) => {
+  const currentTime = performance.now() / 1000;
+  return trigger(null, hap, currentTime, cps, targetTime);
+};
diff --git a/packages/repl/package.json b/packages/repl/package.json
index 70687d1c..9ea71a69 100644
--- a/packages/repl/package.json
+++ b/packages/repl/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@strudel/repl",
-  "version": "1.0.2",
+  "version": "1.1.0",
   "description": "Strudel REPL as a Web Component",
   "module": "index.mjs",
   "publishConfig": {
diff --git a/packages/repl/repl-component.mjs b/packages/repl/repl-component.mjs
index e6e0ee0e..36208413 100644
--- a/packages/repl/repl-component.mjs
+++ b/packages/repl/repl-component.mjs
@@ -10,6 +10,8 @@ if (typeof HTMLElement !== 'undefined') {
     static observedAttributes = ['code'];
     settings = codemirrorSettings.get();
     editor = null;
+    sync = false;
+    solo = true;
     constructor() {
       super();
     }
@@ -49,6 +51,8 @@ if (typeof HTMLElement !== 'undefined') {
           });
           this.dispatchEvent(event);
         },
+        solo: this.solo,
+        sync: this.sync,
       });
       // init settings
       this.editor.updateSettings(this.settings);
diff --git a/packages/repl/vite.config.js b/packages/repl/vite.config.js
index ca209b4e..84781891 100644
--- a/packages/repl/vite.config.js
+++ b/packages/repl/vite.config.js
@@ -6,6 +6,7 @@ import replace from '@rollup/plugin-replace';
 
 // https://vitejs.dev/config/
 export default defineConfig({
+  base: './',
   plugins: [],
   build: {
     lib: {
diff --git a/packages/sampler/package.json b/packages/sampler/package.json
index 58c7db6b..252fe935 100644
--- a/packages/sampler/package.json
+++ b/packages/sampler/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@strudel/sampler",
-  "version": "0.0.9",
+  "version": "0.1.0",
   "description": "",
   "keywords": [
     "tidalcycles",
@@ -16,4 +16,4 @@
   "dependencies": {
     "cowsay": "^1.6.0"
   }
-}
\ No newline at end of file
+}
diff --git a/packages/sampler/sample-server.mjs b/packages/sampler/sample-server.mjs
index b9ae64ed..12520992 100644
--- a/packages/sampler/sample-server.mjs
+++ b/packages/sampler/sample-server.mjs
@@ -4,7 +4,7 @@ import cowsay from 'cowsay';
 import { createReadStream } from 'fs';
 import { readdir } from 'fs/promises';
 import http from 'http';
-import { join } from 'path';
+import { join, sep } from 'path';
 import os from 'os';
 
 // eslint-disable-next-line
@@ -45,15 +45,16 @@ async function getFilesInDirectory(directory) {
 }
 
 async function getBanks(directory) {
-  // const directory = resolve(__dirname, '.');
   let files = await getFilesInDirectory(directory);
   let banks = {};
-  files = files.map((url) => {
-    const [bank] = url.split('/').slice(-2);
+  directory = directory.split(sep).join('/');
+  files = files.map((path) => {
+    path = path.split(sep).join('/');
+    const [bank] = path.split('/').slice(-2);
     banks[bank] = banks[bank] || [];
-    url = url.replace(directory, '');
-    banks[bank].push(url);
-    return url;
+    const relativeUrl = path.replace(directory, '');
+    banks[bank].push(relativeUrl);
+    return relativeUrl;
   });
   banks._base = `http://localhost:5432`;
   return { banks, files };
@@ -74,7 +75,7 @@ const server = http.createServer(async (req, res) => {
     res.end('File not found');
     return;
   }
-  const filePath = join(directory, subpath);
+  const filePath = join(directory, subpath.split('/').join(sep));
   const readStream = createReadStream(filePath);
   readStream.on('error', (err) => {
     res.statusCode = 500;
diff --git a/packages/serial/package.json b/packages/serial/package.json
index 9a98a253..02418df3 100644
--- a/packages/serial/package.json
+++ b/packages/serial/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@strudel/serial",
-  "version": "1.0.1",
+  "version": "1.1.0",
   "description": "Webserial API for strudel",
   "main": "serial.mjs",
   "type": "module",
diff --git a/packages/serial/serial.mjs b/packages/serial/serial.mjs
index 81eb42f2..e0eeaced 100644
--- a/packages/serial/serial.mjs
+++ b/packages/serial/serial.mjs
@@ -68,7 +68,7 @@ Pattern.prototype.serial = function (br = 115200, sendcrc = false, singlecharids
     if (!(name in writeMessagers)) {
       getWriter(name, br);
     }
-    const onTrigger = (time, hap, currentTime) => {
+    const onTrigger = (t_deprecate, hap, currentTime, cps, targetTime) => {
       var message = '';
       var chk = 0;
       if (typeof hap.value === 'object') {
@@ -105,7 +105,7 @@ Pattern.prototype.serial = function (br = 115200, sendcrc = false, singlecharids
       } else {
         message = hap.value;
       }
-      const offset = (time - currentTime + latency) * 1000;
+      const offset = (targetTime - currentTime + latency) * 1000;
 
       window.setTimeout(function () {
         writeMessagers[name](message, chk);
diff --git a/packages/soundfonts/package.json b/packages/soundfonts/package.json
index db8370c3..82696312 100644
--- a/packages/soundfonts/package.json
+++ b/packages/soundfonts/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@strudel/soundfonts",
-  "version": "1.0.1",
+  "version": "1.1.0",
   "description": "Soundsfont support for strudel",
   "main": "index.mjs",
   "publishConfig": {
diff --git a/packages/superdough/fft.js b/packages/superdough/fft.js
new file mode 100644
index 00000000..38294952
--- /dev/null
+++ b/packages/superdough/fft.js
@@ -0,0 +1,488 @@
+'use strict';
+// sourced from https://github.com/indutny/fft.js/
+// LICENSE
+// This software is licensed under the MIT License.
+// Copyright Fedor Indutny, 2017.
+// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+// The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+export default class FFT {
+  constructor(size) {
+    this.size = size | 0;
+    if (this.size <= 1 || (this.size & (this.size - 1)) !== 0)
+      throw new Error('FFT size must be a power of two and bigger than 1');
+
+    this._csize = size << 1;
+
+    // NOTE: Use of `var` is intentional for old V8 versions
+    var table = new Array(this.size * 2);
+    for (var i = 0; i < table.length; i += 2) {
+      const angle = (Math.PI * i) / this.size;
+      table[i] = Math.cos(angle);
+      table[i + 1] = -Math.sin(angle);
+    }
+    this.table = table;
+
+    // Find size's power of two
+    var power = 0;
+    for (var t = 1; this.size > t; t <<= 1) power++;
+
+    // Calculate initial step's width:
+    //   * If we are full radix-4 - it is 2x smaller to give inital len=8
+    //   * Otherwise it is the same as `power` to give len=4
+    this._width = power % 2 === 0 ? power - 1 : power;
+
+    // Pre-compute bit-reversal patterns
+    this._bitrev = new Array(1 << this._width);
+    for (var j = 0; j < this._bitrev.length; j++) {
+      this._bitrev[j] = 0;
+      for (var shift = 0; shift < this._width; shift += 2) {
+        var revShift = this._width - shift - 2;
+        this._bitrev[j] |= ((j >>> shift) & 3) << revShift;
+      }
+    }
+
+    this._out = null;
+    this._data = null;
+    this._inv = 0;
+  }
+  fromComplexArray(complex, storage) {
+    var res = storage || new Array(complex.length >>> 1);
+    for (var i = 0; i < complex.length; i += 2) res[i >>> 1] = complex[i];
+    return res;
+  }
+  createComplexArray() {
+    const res = new Array(this._csize);
+    for (var i = 0; i < res.length; i++) res[i] = 0;
+    return res;
+  }
+  toComplexArray(input, storage) {
+    var res = storage || this.createComplexArray();
+    for (var i = 0; i < res.length; i += 2) {
+      res[i] = input[i >>> 1];
+      res[i + 1] = 0;
+    }
+    return res;
+  }
+  completeSpectrum(spectrum) {
+    var size = this._csize;
+    var half = size >>> 1;
+    for (var i = 2; i < half; i += 2) {
+      spectrum[size - i] = spectrum[i];
+      spectrum[size - i + 1] = -spectrum[i + 1];
+    }
+  }
+  transform(out, data) {
+    if (out === data) throw new Error('Input and output buffers must be different');
+
+    this._out = out;
+    this._data = data;
+    this._inv = 0;
+    this._transform4();
+    this._out = null;
+    this._data = null;
+  }
+  realTransform(out, data) {
+    if (out === data) throw new Error('Input and output buffers must be different');
+
+    this._out = out;
+    this._data = data;
+    this._inv = 0;
+    this._realTransform4();
+    this._out = null;
+    this._data = null;
+  }
+  inverseTransform(out, data) {
+    if (out === data) throw new Error('Input and output buffers must be different');
+
+    this._out = out;
+    this._data = data;
+    this._inv = 1;
+    this._transform4();
+    for (var i = 0; i < out.length; i++) out[i] /= this.size;
+    this._out = null;
+    this._data = null;
+  }
+  // radix-4 implementation
+  //
+  // NOTE: Uses of `var` are intentional for older V8 version that do not
+  // support both `let compound assignments` and `const phi`
+  _transform4() {
+    var out = this._out;
+    var size = this._csize;
+
+    // Initial step (permute and transform)
+    var width = this._width;
+    var step = 1 << width;
+    var len = (size / step) << 1;
+
+    var outOff;
+    var t;
+    var bitrev = this._bitrev;
+    if (len === 4) {
+      for (outOff = 0, t = 0; outOff < size; outOff += len, t++) {
+        const off = bitrev[t];
+        this._singleTransform2(outOff, off, step);
+      }
+    } else {
+      // len === 8
+      for (outOff = 0, t = 0; outOff < size; outOff += len, t++) {
+        const off = bitrev[t];
+        this._singleTransform4(outOff, off, step);
+      }
+    }
+
+    // Loop through steps in decreasing order
+    var inv = this._inv ? -1 : 1;
+    var table = this.table;
+    for (step >>= 2; step >= 2; step >>= 2) {
+      len = (size / step) << 1;
+      var quarterLen = len >>> 2;
+
+      // Loop through offsets in the data
+      for (outOff = 0; outOff < size; outOff += len) {
+        // Full case
+        var limit = outOff + quarterLen;
+        for (var i = outOff, k = 0; i < limit; i += 2, k += step) {
+          const A = i;
+          const B = A + quarterLen;
+          const C = B + quarterLen;
+          const D = C + quarterLen;
+
+          // Original values
+          const Ar = out[A];
+          const Ai = out[A + 1];
+          const Br = out[B];
+          const Bi = out[B + 1];
+          const Cr = out[C];
+          const Ci = out[C + 1];
+          const Dr = out[D];
+          const Di = out[D + 1];
+
+          // Middle values
+          const MAr = Ar;
+          const MAi = Ai;
+
+          const tableBr = table[k];
+          const tableBi = inv * table[k + 1];
+          const MBr = Br * tableBr - Bi * tableBi;
+          const MBi = Br * tableBi + Bi * tableBr;
+
+          const tableCr = table[2 * k];
+          const tableCi = inv * table[2 * k + 1];
+          const MCr = Cr * tableCr - Ci * tableCi;
+          const MCi = Cr * tableCi + Ci * tableCr;
+
+          const tableDr = table[3 * k];
+          const tableDi = inv * table[3 * k + 1];
+          const MDr = Dr * tableDr - Di * tableDi;
+          const MDi = Dr * tableDi + Di * tableDr;
+
+          // Pre-Final values
+          const T0r = MAr + MCr;
+          const T0i = MAi + MCi;
+          const T1r = MAr - MCr;
+          const T1i = MAi - MCi;
+          const T2r = MBr + MDr;
+          const T2i = MBi + MDi;
+          const T3r = inv * (MBr - MDr);
+          const T3i = inv * (MBi - MDi);
+
+          // Final values
+          const FAr = T0r + T2r;
+          const FAi = T0i + T2i;
+
+          const FCr = T0r - T2r;
+          const FCi = T0i - T2i;
+
+          const FBr = T1r + T3i;
+          const FBi = T1i - T3r;
+
+          const FDr = T1r - T3i;
+          const FDi = T1i + T3r;
+
+          out[A] = FAr;
+          out[A + 1] = FAi;
+          out[B] = FBr;
+          out[B + 1] = FBi;
+          out[C] = FCr;
+          out[C + 1] = FCi;
+          out[D] = FDr;
+          out[D + 1] = FDi;
+        }
+      }
+    }
+  }
+  // radix-2 implementation
+  //
+  // NOTE: Only called for len=4
+  _singleTransform2(outOff, off, step) {
+    const out = this._out;
+    const data = this._data;
+
+    const evenR = data[off];
+    const evenI = data[off + 1];
+    const oddR = data[off + step];
+    const oddI = data[off + step + 1];
+
+    const leftR = evenR + oddR;
+    const leftI = evenI + oddI;
+    const rightR = evenR - oddR;
+    const rightI = evenI - oddI;
+
+    out[outOff] = leftR;
+    out[outOff + 1] = leftI;
+    out[outOff + 2] = rightR;
+    out[outOff + 3] = rightI;
+  }
+  // radix-4
+  //
+  // NOTE: Only called for len=8
+  _singleTransform4(outOff, off, step) {
+    const out = this._out;
+    const data = this._data;
+    const inv = this._inv ? -1 : 1;
+    const step2 = step * 2;
+    const step3 = step * 3;
+
+    // Original values
+    const Ar = data[off];
+    const Ai = data[off + 1];
+    const Br = data[off + step];
+    const Bi = data[off + step + 1];
+    const Cr = data[off + step2];
+    const Ci = data[off + step2 + 1];
+    const Dr = data[off + step3];
+    const Di = data[off + step3 + 1];
+
+    // Pre-Final values
+    const T0r = Ar + Cr;
+    const T0i = Ai + Ci;
+    const T1r = Ar - Cr;
+    const T1i = Ai - Ci;
+    const T2r = Br + Dr;
+    const T2i = Bi + Di;
+    const T3r = inv * (Br - Dr);
+    const T3i = inv * (Bi - Di);
+
+    // Final values
+    const FAr = T0r + T2r;
+    const FAi = T0i + T2i;
+
+    const FBr = T1r + T3i;
+    const FBi = T1i - T3r;
+
+    const FCr = T0r - T2r;
+    const FCi = T0i - T2i;
+
+    const FDr = T1r - T3i;
+    const FDi = T1i + T3r;
+
+    out[outOff] = FAr;
+    out[outOff + 1] = FAi;
+    out[outOff + 2] = FBr;
+    out[outOff + 3] = FBi;
+    out[outOff + 4] = FCr;
+    out[outOff + 5] = FCi;
+    out[outOff + 6] = FDr;
+    out[outOff + 7] = FDi;
+  }
+  // Real input radix-4 implementation
+  _realTransform4() {
+    var out = this._out;
+    var size = this._csize;
+
+    // Initial step (permute and transform)
+    var width = this._width;
+    var step = 1 << width;
+    var len = (size / step) << 1;
+
+    var outOff;
+    var t;
+    var bitrev = this._bitrev;
+    if (len === 4) {
+      for (outOff = 0, t = 0; outOff < size; outOff += len, t++) {
+        const off = bitrev[t];
+        this._singleRealTransform2(outOff, off >>> 1, step >>> 1);
+      }
+    } else {
+      // len === 8
+      for (outOff = 0, t = 0; outOff < size; outOff += len, t++) {
+        const off = bitrev[t];
+        this._singleRealTransform4(outOff, off >>> 1, step >>> 1);
+      }
+    }
+
+    // Loop through steps in decreasing order
+    var inv = this._inv ? -1 : 1;
+    var table = this.table;
+    for (step >>= 2; step >= 2; step >>= 2) {
+      len = (size / step) << 1;
+      var halfLen = len >>> 1;
+      var quarterLen = halfLen >>> 1;
+      var hquarterLen = quarterLen >>> 1;
+
+      // Loop through offsets in the data
+      for (outOff = 0; outOff < size; outOff += len) {
+        for (var i = 0, k = 0; i <= hquarterLen; i += 2, k += step) {
+          var A = outOff + i;
+          var B = A + quarterLen;
+          var C = B + quarterLen;
+          var D = C + quarterLen;
+
+          // Original values
+          var Ar = out[A];
+          var Ai = out[A + 1];
+          var Br = out[B];
+          var Bi = out[B + 1];
+          var Cr = out[C];
+          var Ci = out[C + 1];
+          var Dr = out[D];
+          var Di = out[D + 1];
+
+          // Middle values
+          var MAr = Ar;
+          var MAi = Ai;
+
+          var tableBr = table[k];
+          var tableBi = inv * table[k + 1];
+          var MBr = Br * tableBr - Bi * tableBi;
+          var MBi = Br * tableBi + Bi * tableBr;
+
+          var tableCr = table[2 * k];
+          var tableCi = inv * table[2 * k + 1];
+          var MCr = Cr * tableCr - Ci * tableCi;
+          var MCi = Cr * tableCi + Ci * tableCr;
+
+          var tableDr = table[3 * k];
+          var tableDi = inv * table[3 * k + 1];
+          var MDr = Dr * tableDr - Di * tableDi;
+          var MDi = Dr * tableDi + Di * tableDr;
+
+          // Pre-Final values
+          var T0r = MAr + MCr;
+          var T0i = MAi + MCi;
+          var T1r = MAr - MCr;
+          var T1i = MAi - MCi;
+          var T2r = MBr + MDr;
+          var T2i = MBi + MDi;
+          var T3r = inv * (MBr - MDr);
+          var T3i = inv * (MBi - MDi);
+
+          // Final values
+          var FAr = T0r + T2r;
+          var FAi = T0i + T2i;
+
+          var FBr = T1r + T3i;
+          var FBi = T1i - T3r;
+
+          out[A] = FAr;
+          out[A + 1] = FAi;
+          out[B] = FBr;
+          out[B + 1] = FBi;
+
+          // Output final middle point
+          if (i === 0) {
+            var FCr = T0r - T2r;
+            var FCi = T0i - T2i;
+            out[C] = FCr;
+            out[C + 1] = FCi;
+            continue;
+          }
+
+          // Do not overwrite ourselves
+          if (i === hquarterLen) continue;
+
+          // In the flipped case:
+          // MAi = -MAi
+          // MBr=-MBi, MBi=-MBr
+          // MCr=-MCr
+          // MDr=MDi, MDi=MDr
+          var ST0r = T1r;
+          var ST0i = -T1i;
+          var ST1r = T0r;
+          var ST1i = -T0i;
+          var ST2r = -inv * T3i;
+          var ST2i = -inv * T3r;
+          var ST3r = -inv * T2i;
+          var ST3i = -inv * T2r;
+
+          var SFAr = ST0r + ST2r;
+          var SFAi = ST0i + ST2i;
+
+          var SFBr = ST1r + ST3i;
+          var SFBi = ST1i - ST3r;
+
+          var SA = outOff + quarterLen - i;
+          var SB = outOff + halfLen - i;
+
+          out[SA] = SFAr;
+          out[SA + 1] = SFAi;
+          out[SB] = SFBr;
+          out[SB + 1] = SFBi;
+        }
+      }
+    }
+  }
+  // radix-2 implementation
+  //
+  // NOTE: Only called for len=4
+  _singleRealTransform2(outOff, off, step) {
+    const out = this._out;
+    const data = this._data;
+
+    const evenR = data[off];
+    const oddR = data[off + step];
+
+    const leftR = evenR + oddR;
+    const rightR = evenR - oddR;
+
+    out[outOff] = leftR;
+    out[outOff + 1] = 0;
+    out[outOff + 2] = rightR;
+    out[outOff + 3] = 0;
+  }
+  // radix-4
+  //
+  // NOTE: Only called for len=8
+  _singleRealTransform4(outOff, off, step) {
+    const out = this._out;
+    const data = this._data;
+    const inv = this._inv ? -1 : 1;
+    const step2 = step * 2;
+    const step3 = step * 3;
+
+    // Original values
+    const Ar = data[off];
+    const Br = data[off + step];
+    const Cr = data[off + step2];
+    const Dr = data[off + step3];
+
+    // Pre-Final values
+    const T0r = Ar + Cr;
+    const T1r = Ar - Cr;
+    const T2r = Br + Dr;
+    const T3r = inv * (Br - Dr);
+
+    // Final values
+    const FAr = T0r + T2r;
+
+    const FBr = T1r;
+    const FBi = -T3r;
+
+    const FCr = T0r - T2r;
+
+    const FDr = T1r;
+    const FDi = T3r;
+
+    out[outOff] = FAr;
+    out[outOff + 1] = 0;
+    out[outOff + 2] = FBr;
+    out[outOff + 3] = FBi;
+    out[outOff + 4] = FCr;
+    out[outOff + 5] = 0;
+    out[outOff + 6] = FDr;
+    out[outOff + 7] = FDi;
+  }
+}
diff --git a/packages/superdough/helpers.mjs b/packages/superdough/helpers.mjs
index f5f3ad68..e51156fe 100644
--- a/packages/superdough/helpers.mjs
+++ b/packages/superdough/helpers.mjs
@@ -14,6 +14,15 @@ const getSlope = (y1, y2, x1, x2) => {
   }
   return (y2 - y1) / (x2 - x1);
 };
+
+export function getWorklet(ac, processor, params, config) {
+  const node = new AudioWorkletNode(ac, processor, config);
+  Object.entries(params).forEach(([key, value]) => {
+    node.parameters.get(key).value = value;
+  });
+  return node;
+}
+
 export const getParamADSR = (
   param,
   attack,
@@ -103,14 +112,22 @@ export const getADSRValues = (params, curve = 'linear', defaultValues) => {
   return [Math.max(a ?? 0, envmin), Math.max(d ?? 0, envmin), Math.min(sustain, envmax), Math.max(r ?? 0, releaseMin)];
 };
 
-export function createFilter(context, type, frequency, Q, att, dec, sus, rel, fenv, start, end, fanchor) {
+export function createFilter(context, type, frequency, Q, att, dec, sus, rel, fenv, start, end, fanchor, model, drive) {
   const curve = 'exponential';
   const [attack, decay, sustain, release] = getADSRValues([att, dec, sus, rel], curve, [0.005, 0.14, 0, 0.1]);
-  const filter = context.createBiquadFilter();
+  let filter;
+  let frequencyParam;
+  if (model === 'ladder') {
+    filter = getWorklet(context, 'ladder-processor', { frequency, q: Q, drive });
+    frequencyParam = filter.parameters.get('frequency');
+  } else {
+    filter = context.createBiquadFilter();
+    filter.type = type;
+    filter.Q.value = Q;
+    filter.frequency.value = frequency;
+    frequencyParam = filter.frequency;
+  }
 
-  filter.type = type;
-  filter.Q.value = Q;
-  filter.frequency.value = frequency;
   // envelope is active when any of these values is set
   const hasEnvelope = att ?? dec ?? sus ?? rel ?? fenv;
   // Apply ADSR to filter frequency
@@ -122,7 +139,7 @@ export function createFilter(context, type, frequency, Q, att, dec, sus, rel, fe
     let min = clamp(2 ** -offset * frequency, 0, 20000);
     let max = clamp(2 ** (fenvAbs - offset) * frequency, 0, 20000);
     if (fenv < 0) [min, max] = [max, min];
-    getParamADSR(filter.frequency, attack, decay, sustain, release, min, max, start, end, curve);
+    getParamADSR(frequencyParam, attack, decay, sustain, release, min, max, start, end, curve);
     return filter;
   }
   return filter;
diff --git a/packages/superdough/ola-processor.js b/packages/superdough/ola-processor.js
new file mode 100644
index 00000000..38d45a25
--- /dev/null
+++ b/packages/superdough/ola-processor.js
@@ -0,0 +1,185 @@
+'use strict';
+
+// sourced from https://github.com/olvb/phaze/tree/master?tab=readme-ov-file
+const WEBAUDIO_BLOCK_SIZE = 128;
+
+/** Overlap-Add Node */
+class OLAProcessor extends AudioWorkletProcessor {
+  constructor(options) {
+    super(options);
+    this.started = false;
+    this.nbInputs = options.numberOfInputs;
+    this.nbOutputs = options.numberOfOutputs;
+
+    this.blockSize = options.processorOptions.blockSize;
+    // TODO for now, the only support hop size is the size of a web audio block
+    this.hopSize = WEBAUDIO_BLOCK_SIZE;
+
+    this.nbOverlaps = this.blockSize / this.hopSize;
+
+    // pre-allocate input buffers (will be reallocated if needed)
+    this.inputBuffers = new Array(this.nbInputs);
+    this.inputBuffersHead = new Array(this.nbInputs);
+    this.inputBuffersToSend = new Array(this.nbInputs);
+    // default to 1 channel per input until we know more
+    for (let i = 0; i < this.nbInputs; i++) {
+      this.allocateInputChannels(i, 1);
+    }
+    // pre-allocate input buffers (will be reallocated if needed)
+    this.outputBuffers = new Array(this.nbOutputs);
+    this.outputBuffersToRetrieve = new Array(this.nbOutputs);
+    // default to 1 channel per output until we know more
+    for (let i = 0; i < this.nbOutputs; i++) {
+      this.allocateOutputChannels(i, 1);
+    }
+  }
+
+  /** Handles dynamic reallocation of input/output channels buffer
+     (channel numbers may lety during lifecycle) **/
+  reallocateChannelsIfNeeded(inputs, outputs) {
+    for (let i = 0; i < this.nbInputs; i++) {
+      let nbChannels = inputs[i].length;
+      if (nbChannels != this.inputBuffers[i].length) {
+        this.allocateInputChannels(i, nbChannels);
+      }
+    }
+
+    for (let i = 0; i < this.nbOutputs; i++) {
+      let nbChannels = outputs[i].length;
+      if (nbChannels != this.outputBuffers[i].length) {
+        this.allocateOutputChannels(i, nbChannels);
+      }
+    }
+  }
+
+  allocateInputChannels(inputIndex, nbChannels) {
+    // allocate input buffers
+
+    this.inputBuffers[inputIndex] = new Array(nbChannels);
+    for (let i = 0; i < nbChannels; i++) {
+      this.inputBuffers[inputIndex][i] = new Float32Array(this.blockSize + WEBAUDIO_BLOCK_SIZE);
+      this.inputBuffers[inputIndex][i].fill(0);
+    }
+
+    // allocate input buffers to send and head pointers to copy from
+    // (cannot directly send a pointer/subarray because input may be modified)
+    this.inputBuffersHead[inputIndex] = new Array(nbChannels);
+    this.inputBuffersToSend[inputIndex] = new Array(nbChannels);
+    for (let i = 0; i < nbChannels; i++) {
+      this.inputBuffersHead[inputIndex][i] = this.inputBuffers[inputIndex][i].subarray(0, this.blockSize);
+      this.inputBuffersToSend[inputIndex][i] = new Float32Array(this.blockSize);
+    }
+  }
+
+  allocateOutputChannels(outputIndex, nbChannels) {
+    // allocate output buffers
+    this.outputBuffers[outputIndex] = new Array(nbChannels);
+    for (let i = 0; i < nbChannels; i++) {
+      this.outputBuffers[outputIndex][i] = new Float32Array(this.blockSize);
+      this.outputBuffers[outputIndex][i].fill(0);
+    }
+
+    // allocate output buffers to retrieve
+    // (cannot send a pointer/subarray because new output has to be add to exising output)
+    this.outputBuffersToRetrieve[outputIndex] = new Array(nbChannels);
+    for (let i = 0; i < nbChannels; i++) {
+      this.outputBuffersToRetrieve[outputIndex][i] = new Float32Array(this.blockSize);
+      this.outputBuffersToRetrieve[outputIndex][i].fill(0);
+    }
+  }
+
+  /** Read next web audio block to input buffers **/
+  readInputs(inputs) {
+    // when playback is paused, we may stop receiving new samples
+    if (inputs[0].length && inputs[0][0].length == 0) {
+      for (let i = 0; i < this.nbInputs; i++) {
+        for (let j = 0; j < this.inputBuffers[i].length; j++) {
+          this.inputBuffers[i][j].fill(0, this.blockSize);
+        }
+      }
+      return;
+    }
+
+    for (let i = 0; i < this.nbInputs; i++) {
+      for (let j = 0; j < this.inputBuffers[i].length; j++) {
+        let webAudioBlock = inputs[i][j];
+        this.inputBuffers[i][j].set(webAudioBlock, this.blockSize);
+      }
+    }
+  }
+
+  /** Write next web audio block from output buffers **/
+  writeOutputs(outputs) {
+    for (let i = 0; i < this.nbInputs; i++) {
+      for (let j = 0; j < this.inputBuffers[i].length; j++) {
+        let webAudioBlock = this.outputBuffers[i][j].subarray(0, WEBAUDIO_BLOCK_SIZE);
+        outputs[i][j].set(webAudioBlock);
+      }
+    }
+  }
+
+  /** Shift left content of input buffers to receive new web audio block **/
+  shiftInputBuffers() {
+    for (let i = 0; i < this.nbInputs; i++) {
+      for (let j = 0; j < this.inputBuffers[i].length; j++) {
+        this.inputBuffers[i][j].copyWithin(0, WEBAUDIO_BLOCK_SIZE);
+      }
+    }
+  }
+
+  /** Shift left content of output buffers to receive new web audio block **/
+  shiftOutputBuffers() {
+    for (let i = 0; i < this.nbOutputs; i++) {
+      for (let j = 0; j < this.outputBuffers[i].length; j++) {
+        this.outputBuffers[i][j].copyWithin(0, WEBAUDIO_BLOCK_SIZE);
+        this.outputBuffers[i][j].subarray(this.blockSize - WEBAUDIO_BLOCK_SIZE).fill(0);
+      }
+    }
+  }
+
+  /** Copy contents of input buffers to buffer actually sent to process **/
+  prepareInputBuffersToSend() {
+    for (let i = 0; i < this.nbInputs; i++) {
+      for (let j = 0; j < this.inputBuffers[i].length; j++) {
+        this.inputBuffersToSend[i][j].set(this.inputBuffersHead[i][j]);
+      }
+    }
+  }
+
+  /** Add contents of output buffers just processed to output buffers **/
+  handleOutputBuffersToRetrieve() {
+    for (let i = 0; i < this.nbOutputs; i++) {
+      for (let j = 0; j < this.outputBuffers[i].length; j++) {
+        for (let k = 0; k < this.blockSize; k++) {
+          this.outputBuffers[i][j][k] += this.outputBuffersToRetrieve[i][j][k] / this.nbOverlaps;
+        }
+      }
+    }
+  }
+
+  process(inputs, outputs, params) {
+    const input = inputs[0];
+    const hasInput = !(input[0] === undefined);
+    if (this.started && !hasInput) {
+      return false;
+    }
+    this.started = hasInput;
+    this.reallocateChannelsIfNeeded(inputs, outputs);
+
+    this.readInputs(inputs);
+    this.shiftInputBuffers();
+    this.prepareInputBuffersToSend();
+    this.processOLA(this.inputBuffersToSend, this.outputBuffersToRetrieve, params);
+    this.handleOutputBuffersToRetrieve();
+    this.writeOutputs(outputs);
+    this.shiftOutputBuffers();
+
+    return true;
+  }
+
+  processOLA(inputs, outputs, params) {
+    console.assert(false, 'Not overriden');
+  }
+}
+
+export default OLAProcessor;
diff --git a/packages/superdough/package.json b/packages/superdough/package.json
index f1abd95b..685ab9c5 100644
--- a/packages/superdough/package.json
+++ b/packages/superdough/package.json
@@ -1,6 +1,6 @@
 {
   "name": "superdough",
-  "version": "1.0.1",
+  "version": "1.1.0",
   "description": "simple web audio synth and sampler intended for live coding. inspired by superdirt and webdirt.",
   "main": "index.mjs",
   "type": "module",
diff --git a/packages/superdough/sampler.mjs b/packages/superdough/sampler.mjs
index 10087fc6..f5e46d6b 100644
--- a/packages/superdough/sampler.mjs
+++ b/packages/superdough/sampler.mjs
@@ -22,16 +22,13 @@ function humanFileSize(bytes, si) {
   return bytes.toFixed(1) + ' ' + units[u];
 }
 
-export const getSampleBufferSource = async (s, n, note, speed, freq, bank, resolveUrl) => {
-  let transpose = 0;
-  if (freq !== undefined && note !== undefined) {
-    logger('[sampler] hap has note and freq. ignoring note', 'warning');
-  }
-  let midi = valueToMidi({ freq, note }, 36);
-  transpose = midi - 36; // C3 is middle C
-
-  const ac = getAudioContext();
-
+// deduces relevant info for sample loading from hap.value and sample definition
+// it encapsulates the core sampler logic into a pure and synchronous function
+// hapValue: Hap.value, bank: sample bank definition for sound "s" (values in strudel.json format)
+export function getSampleInfo(hapValue, bank) {
+  const { s, n = 0, speed = 1.0 } = hapValue;
+  let midi = valueToMidi(hapValue, 36);
+  let transpose = midi - 36; // C3 is middle C;
   let sampleUrl;
   let index = 0;
   if (Array.isArray(bank)) {
@@ -50,19 +47,54 @@ export const getSampleBufferSource = async (s, n, note, speed, freq, bank, resol
     index = getSoundIndex(n, bank[closest].length);
     sampleUrl = bank[closest][index];
   }
+  const label = `${s}:${index}`;
+  let playbackRate = Math.abs(speed) * Math.pow(2, transpose / 12);
+  return { transpose, sampleUrl, index, midi, label, playbackRate };
+}
+
+// takes hapValue and returns buffer + playbackRate.
+export const getSampleBuffer = async (hapValue, bank, resolveUrl) => {
+  let { sampleUrl, label, playbackRate } = getSampleInfo(hapValue, bank);
   if (resolveUrl) {
     sampleUrl = await resolveUrl(sampleUrl);
   }
-  let buffer = await loadBuffer(sampleUrl, ac, s, index);
-  if (speed < 0) {
+  const ac = getAudioContext();
+  const buffer = await loadBuffer(sampleUrl, ac, label);
+
+  if (hapValue.unit === 'c') {
+    playbackRate = playbackRate * buffer.duration;
+  }
+  return { buffer, playbackRate };
+};
+
+// creates playback ready AudioBufferSourceNode from hapValue
+export const getSampleBufferSource = async (hapValue, bank, resolveUrl) => {
+  let { buffer, playbackRate } = await getSampleBuffer(hapValue, bank, resolveUrl);
+  if (hapValue.speed < 0) {
     // should this be cached?
     buffer = reverseBuffer(buffer);
   }
+  const ac = getAudioContext();
   const bufferSource = ac.createBufferSource();
   bufferSource.buffer = buffer;
-  const playbackRate = 1.0 * Math.pow(2, transpose / 12);
   bufferSource.playbackRate.value = playbackRate;
-  return bufferSource;
+
+  const { s, loopBegin = 0, loopEnd = 1, begin = 0, end = 1 } = hapValue;
+
+  // "The computation of the offset into the sound is performed using the sound buffer's natural sample rate,
+  // rather than the current playback rate, so even if the sound is playing at twice its normal speed,
+  // the midway point through a 10-second audio buffer is still 5."
+  const offset = begin * bufferSource.buffer.duration;
+
+  const loop = s.startsWith('wt_') ? 1 : hapValue.loop;
+  if (loop) {
+    bufferSource.loop = true;
+    bufferSource.loopStart = loopBegin * bufferSource.buffer.duration - offset;
+    bufferSource.loopEnd = loopEnd * bufferSource.buffer.duration - offset;
+  }
+  const bufferDuration = bufferSource.buffer.duration / bufferSource.playbackRate.value;
+  const sliceDuration = (end - begin) * bufferDuration;
+  return { bufferSource, offset, bufferDuration, sliceDuration };
 };
 
 export const loadBuffer = (url, ac, s, n = 0) => {
@@ -232,10 +264,10 @@ export const samples = async (sampleMap, baseUrl = sampleMap._base || '', option
   const { prebake, tag } = options;
   processSampleMap(
     sampleMap,
-    (key, value) =>
-      registerSound(key, (t, hapValue, onended) => onTriggerSample(t, hapValue, onended, value), {
+    (key, bank) =>
+      registerSound(key, (t, hapValue, onended) => onTriggerSample(t, hapValue, onended, bank), {
         type: 'sample',
-        samples: value,
+        samples: bank,
         baseUrl,
         prebake,
         tag,
@@ -249,38 +281,26 @@ const cutGroups = [];
 export async function onTriggerSample(t, value, onended, bank, resolveUrl) {
   let {
     s,
-    freq,
-    unit,
     nudge = 0, // TODO: is this in seconds?
     cut,
     loop,
     clip = undefined, // if set, samples will be cut off when the hap ends
     n = 0,
-    note,
     speed = 1, // sample playback speed
-    loopBegin = 0,
-    begin = 0,
-    loopEnd = 1,
-    end = 1,
     duration,
   } = value;
+
   // load sample
   if (speed === 0) {
     // no playback
     return;
   }
-  loop = s.startsWith('wt_') ? 1 : value.loop;
   const ac = getAudioContext();
+
   // destructure adsr here, because the default should be different for synths and samples
-
   let [attack, decay, sustain, release] = getADSRValues([value.attack, value.decay, value.sustain, value.release]);
-  //const soundfont = getSoundfontKey(s);
-  const time = t + nudge;
 
-  const bufferSource = await getSampleBufferSource(s, n, note, speed, freq, bank, resolveUrl);
-
-  // vibrato
-  let vibratoOscillator = getVibratoOscillator(bufferSource.detune, value, t);
+  const { bufferSource, sliceDuration, offset } = await getSampleBufferSource(value, bank, resolveUrl);
 
   // asny stuff above took too long?
   if (ac.currentTime > t) {
@@ -292,26 +312,19 @@ export async function onTriggerSample(t, value, onended, bank, resolveUrl) {
     logger(`[sampler] could not load "${s}:${n}"`, 'error');
     return;
   }
-  bufferSource.playbackRate.value = Math.abs(speed) * bufferSource.playbackRate.value;
-  if (unit === 'c') {
-    // are there other units?
-    bufferSource.playbackRate.value = bufferSource.playbackRate.value * bufferSource.buffer.duration * 1; //cps;
-  }
-  // "The computation of the offset into the sound is performed using the sound buffer's natural sample rate,
-  // rather than the current playback rate, so even if the sound is playing at twice its normal speed,
-  // the midway point through a 10-second audio buffer is still 5."
-  const offset = begin * bufferSource.buffer.duration;
-  if (loop) {
-    bufferSource.loop = true;
-    bufferSource.loopStart = loopBegin * bufferSource.buffer.duration - offset;
-    bufferSource.loopEnd = loopEnd * bufferSource.buffer.duration - offset;
-  }
+
+  // vibrato
+  let vibratoOscillator = getVibratoOscillator(bufferSource.detune, value, t);
+
+  const time = t + nudge;
   bufferSource.start(time, offset);
+
   const envGain = ac.createGain();
   const node = bufferSource.connect(envGain);
+
+  // if none of these controls is set, the duration of the sound will be set to the duration of the sample slice
   if (clip == null && loop == null && value.release == null) {
-    const bufferDuration = bufferSource.buffer.duration / bufferSource.playbackRate.value;
-    duration = (end - begin) * bufferDuration;
+    duration = sliceDuration;
   }
   let holdEnd = t + duration;
 
diff --git a/packages/superdough/superdough.mjs b/packages/superdough/superdough.mjs
index c0ba96e0..b61f4263 100644
--- a/packages/superdough/superdough.mjs
+++ b/packages/superdough/superdough.mjs
@@ -7,9 +7,9 @@ This program is free software: you can redistribute it and/or modify it under th
 import './feedbackdelay.mjs';
 import './reverb.mjs';
 import './vowel.mjs';
-import { clamp, nanFallback } from './util.mjs';
-import workletsUrl from './worklets.mjs?url';
-import { createFilter, gainNode, getCompressor } from './helpers.mjs';
+import { clamp, nanFallback, _mod } from './util.mjs';
+import workletsUrl from './worklets.mjs?worker&url';
+import { createFilter, gainNode, getCompressor, getWorklet } from './helpers.mjs';
 import { map } from 'nanostores';
 import { logger } from './logger.mjs';
 import { loadBuffer } from './sampler.mjs';
@@ -24,6 +24,52 @@ export function getSound(s) {
   return soundMap.get()[s];
 }
 
+const defaultDefaultValues = {
+  s: 'triangle',
+  gain: 0.8,
+  postgain: 1,
+  density: '.03',
+  ftype: '12db',
+  fanchor: 0,
+  resonance: 1,
+  hresonance: 1,
+  bandq: 1,
+  channels: [1, 2],
+  phaserdepth: 0.75,
+  shapevol: 1,
+  distortvol: 1,
+  delay: 0,
+  delayfeedback: 0.5,
+  delaytime: 0.25,
+  orbit: 1,
+  i: 1,
+  velocity: 1,
+  fft: 8,
+};
+
+let defaultControls = new Map(Object.entries(defaultDefaultValues));
+
+export function setDefaultValue(key, value) {
+  defaultControls.set(key, value);
+}
+export function getDefaultValue(key) {
+  return defaultControls.get(key);
+}
+export function setDefaultValues(defaultsobj) {
+  Object.keys(defaultsobj).forEach((key) => {
+    setDefaultValue(key, defaultsobj[key]);
+  });
+}
+export function resetDefaultValues() {
+  defaultControls = new Map(Object.entries(defaultDefaultValues));
+}
+export function setVersionDefaults(version) {
+  resetDefaultValues();
+  if (version === '1.0') {
+    setDefaultValue('fanchor', 0.5);
+  }
+}
+
 export const resetLoadedSounds = () => soundMap.set({});
 
 let audioContext;
@@ -37,50 +83,53 @@ export const getAudioContext = () => {
   if (!audioContext) {
     return setDefaultAudioContext();
   }
+
   return audioContext;
 };
 
-let workletsLoading;
-
-function loadWorklets() {
-  if (workletsLoading) {
-    return workletsLoading;
-  }
-  workletsLoading = getAudioContext().audioWorklet.addModule(workletsUrl);
-  return workletsLoading;
+export function getAudioContextCurrentTime() {
+  return getAudioContext().currentTime;
 }
 
-export function getWorklet(ac, processor, params, config) {
-  const node = new AudioWorkletNode(ac, processor, config);
-  Object.entries(params).forEach(([key, value]) => {
-    node.parameters.get(key).value = value;
-  });
-  return node;
+let workletsLoading;
+function loadWorklets() {
+  if (!workletsLoading) {
+    workletsLoading = getAudioContext().audioWorklet.addModule(workletsUrl);
+  }
+  return workletsLoading;
 }
 
 // this function should be called on first user interaction (to avoid console warning)
 export async function initAudio(options = {}) {
   const { disableWorklets = false } = options;
-  if (typeof window !== 'undefined') {
-    await getAudioContext().resume();
-    if (!disableWorklets) {
-      await loadWorklets().catch((err) => {
-        console.warn('could not load AudioWorklet effects coarse, crush and shape', err);
-      });
-    } else {
-      console.log('disableWorklets: AudioWorklet effects coarse, crush and shape are skipped!');
-    }
+  if (typeof window === 'undefined') {
+    return;
   }
+  await getAudioContext().resume();
+  if (disableWorklets) {
+    logger('[superdough]: AudioWorklets disabled with disableWorklets');
+    return;
+  }
+  try {
+    await loadWorklets();
+    logger('[superdough] AudioWorklets loaded');
+  } catch (err) {
+    console.warn('could not load AudioWorklet effects', err);
+  }
+  logger('[superdough] ready');
 }
-
+let audioReady;
 export async function initAudioOnFirstClick(options) {
-  return new Promise((resolve) => {
-    document.addEventListener('click', async function listener() {
-      await initAudio(options);
-      resolve();
-      document.removeEventListener('click', listener);
+  if (!audioReady) {
+    audioReady = new Promise((resolve) => {
+      document.addEventListener('click', async function listener() {
+        document.removeEventListener('click', listener);
+        await initAudio(options);
+        resolve();
+      });
     });
-  });
+  }
+  return audioReady;
 }
 
 let delays = {};
@@ -144,26 +193,25 @@ function getDelay(orbit, delaytime, delayfeedback, t) {
   return delays[orbit];
 }
 
-// each orbit will have its own lfo
-const phaserLFOs = {};
-function getPhaser(orbit, t, speed = 1, depth = 0.5, centerFrequency = 1000, sweep = 2000) {
+function getPhaser(time, end, frequency = 1, depth = 0.5, centerFrequency = 1000, sweep = 2000) {
   //gain
   const ac = getAudioContext();
   const lfoGain = ac.createGain();
-  lfoGain.gain.value = sweep;
+  lfoGain.gain.value = sweep * 2;
+  // centerFrequency = centerFrequency * 2;
+  // sweep = sweep * 1.5;
 
-  //LFO
-  if (phaserLFOs[orbit] == null) {
-    phaserLFOs[orbit] = ac.createOscillator();
-    phaserLFOs[orbit].frequency.value = speed;
-    phaserLFOs[orbit].type = 'sine';
-    phaserLFOs[orbit].start();
-  }
-
-  phaserLFOs[orbit].connect(lfoGain);
-  if (phaserLFOs[orbit].frequency.value != speed) {
-    phaserLFOs[orbit].frequency.setValueAtTime(speed, t);
-  }
+  const lfo = getWorklet(ac, 'lfo-processor', {
+    frequency,
+    depth: 1,
+    skew: 0,
+    phaseoffset: 0,
+    time,
+    end,
+    shape: 1,
+    dcoffset: -0.5,
+  });
+  lfo.connect(lfoGain);
 
   //filters
   const numStages = 2; //num of filters in series
@@ -186,10 +234,14 @@ function getPhaser(orbit, t, speed = 1, depth = 0.5, centerFrequency = 1000, swe
   return filterChain[filterChain.length - 1];
 }
 
+function getFilterType(ftype) {
+  ftype = ftype ?? 0;
+  const filterTypes = ['12db', 'ladder', '24db'];
+  return typeof ftype === 'number' ? filterTypes[Math.floor(_mod(ftype, filterTypes.length))] : ftype;
+}
+
 let reverbs = {};
-
 let hasChanged = (now, before) => now !== undefined && now !== before;
-
 function getReverb(orbit, duration, fade, lp, dim, ir) {
   // If no reverb has been created for a given orbit, create one
   if (!reverbs[orbit]) {
@@ -218,11 +270,12 @@ function getReverb(orbit, duration, fade, lp, dim, ir) {
 export let analysers = {},
   analysersData = {};
 
-export function getAnalyserById(id, fftSize = 1024) {
+export function getAnalyserById(id, fftSize = 1024, smoothingTimeConstant = 0.5) {
   if (!analysers[id]) {
     // make sure this doesn't happen too often as it piles up garbage
     const analyserNode = getAudioContext().createAnalyser();
     analyserNode.fftSize = fftSize;
+    analyserNode.smoothingTimeConstant = smoothingTimeConstant;
     // getDestination().connect(analyserNode);
     analysers[id] = analyserNode;
     analysersData[id] = new Float32Array(analysers[id].frequencyBinCount);
@@ -261,6 +314,13 @@ export function resetGlobalEffects() {
 }
 
 export const superdough = async (value, t, hapDuration) => {
+  t = typeof t === 'string' && t.startsWith('=') ? Number(t.slice(1)) : ac.currentTime + t;
+  let { stretch } = value;
+  if (stretch != null) {
+    //account for phase vocoder latency
+    const latency = 0.04;
+    t = t - latency;
+  }
   const ac = getAudioContext();
   if (typeof value !== 'object') {
     throw new Error(
@@ -272,7 +332,7 @@ export const superdough = async (value, t, hapDuration) => {
   // duration is passed as value too..
   value.duration = hapDuration;
   // calculate absolute time
-  t = typeof t === 'string' && t.startsWith('=') ? Number(t.slice(1)) : ac.currentTime + t;
+
   if (t < ac.currentTime) {
     console.warn(
       `[superdough]: cannot schedule sounds in the past (target: ${t.toFixed(2)}, now: ${ac.currentTime.toFixed(2)})`,
@@ -281,15 +341,15 @@ export const superdough = async (value, t, hapDuration) => {
   }
   // destructure
   let {
-    s = 'triangle',
+    s = getDefaultValue('s'),
     bank,
     source,
-    gain = 0.8,
-    postgain = 1,
-    density = 0.03,
+    gain = getDefaultValue('gain'),
+    postgain = getDefaultValue('postgain'),
+    density = getDefaultValue('density'),
     // filters
-    ftype = '12db',
-    fanchor = 0.5,
+    fanchor = getDefaultValue('fanchor'),
+    drive = 0.69,
     // low pass
     cutoff,
     lpenv,
@@ -297,7 +357,7 @@ export const superdough = async (value, t, hapDuration) => {
     lpdecay,
     lpsustain,
     lprelease,
-    resonance = 1,
+    resonance = getDefaultValue('resonance'),
     // high pass
     hpenv,
     hcutoff,
@@ -305,7 +365,7 @@ export const superdough = async (value, t, hapDuration) => {
     hpdecay,
     hpsustain,
     hprelease,
-    hresonance = 1,
+    hresonance = getDefaultValue('hresonance'),
     // band pass
     bpenv,
     bandf,
@@ -313,36 +373,36 @@ export const superdough = async (value, t, hapDuration) => {
     bpdecay,
     bpsustain,
     bprelease,
-    bandq = 1,
-    channels = [1, 2],
+    bandq = getDefaultValue('bandq'),
+    channels = getDefaultValue('channels'),
     //phaser
-    phaser,
-    phaserdepth = 0.75,
+    phaserrate: phaser,
+    phaserdepth = getDefaultValue('phaserdepth'),
     phasersweep,
     phasercenter,
     //
     coarse,
     crush,
     shape,
-    shapevol = 1,
+    shapevol = getDefaultValue('shapevol'),
     distort,
-    distortvol = 1,
+    distortvol = getDefaultValue('distortvol'),
     pan,
     vowel,
-    delay = 0,
-    delayfeedback = 0.5,
-    delaytime = 0.25,
-    orbit = 1,
+    delay = getDefaultValue('delay'),
+    delayfeedback = getDefaultValue('delayfeedback'),
+    delaytime = getDefaultValue('delaytime'),
+    orbit = getDefaultValue('orbit'),
     room,
     roomfade,
     roomlp,
     roomdim,
     roomsize,
     ir,
-    i = 0,
-    velocity = 1,
+    i = getDefaultValue('i'),
+    velocity = getDefaultValue('velocity'),
     analyze, // analyser wet
-    fft = 8, // fftSize 0 - 10
+    fft = getDefaultValue('fft'), // fftSize 0 - 10
     compressor: compressorThreshold,
     compressorRatio,
     compressorKnee,
@@ -362,6 +422,7 @@ export const superdough = async (value, t, hapDuration) => {
   };
   if (bank && s) {
     s = `${bank}_${s}`;
+    value.s = s;
   }
 
   // get source AudioNode
@@ -390,10 +451,13 @@ export const superdough = async (value, t, hapDuration) => {
   }
   const chain = []; // audio nodes that will be connected to each other sequentially
   chain.push(sourceNode);
+  stretch !== undefined && chain.push(getWorklet(ac, 'phase-vocoder-processor', { pitchFactor: stretch }));
 
   // gain stage
   chain.push(gainNode(gain));
 
+  //filter
+  const ftype = getFilterType(value.ftype);
   if (cutoff !== undefined) {
     let lp = () =>
       createFilter(
@@ -409,6 +473,8 @@ export const superdough = async (value, t, hapDuration) => {
         t,
         t + hapDuration,
         fanchor,
+        ftype,
+        drive,
       );
     chain.push(lp());
     if (ftype === '24db') {
@@ -484,7 +550,7 @@ export const superdough = async (value, t, hapDuration) => {
   }
   // phaser
   if (phaser !== undefined && phaserdepth > 0) {
-    const phaserFX = getPhaser(orbit, t, phaser, phaserdepth, phasercenter, phasersweep);
+    const phaserFX = getPhaser(t, t + hapDuration, phaser, phaserdepth, phasercenter, phasersweep);
     chain.push(phaserFX);
   }
 
@@ -532,4 +598,6 @@ export const superdough = async (value, t, hapDuration) => {
   toDisconnect = chain.concat([delaySend, reverbSend, analyserSend]);
 };
 
-export const superdoughTrigger = (t, hap, ct, cps) => superdough(hap, t - ct, hap.duration / cps, cps);
+export const superdoughTrigger = (t, hap, ct, cps) => {
+  superdough(hap, t - ct, hap.duration / cps, cps);
+};
diff --git a/packages/superdough/synth.mjs b/packages/superdough/synth.mjs
index 55ecc83f..621a6e59 100644
--- a/packages/superdough/synth.mjs
+++ b/packages/superdough/synth.mjs
@@ -1,5 +1,5 @@
 import { clamp, midiToFreq, noteToMidi } from './util.mjs';
-import { registerSound, getAudioContext, getWorklet } from './superdough.mjs';
+import { registerSound, getAudioContext } from './superdough.mjs';
 import {
   applyFM,
   gainNode,
@@ -8,6 +8,7 @@ import {
   getPitchEnvelope,
   getVibratoOscillator,
   webAudioTimeout,
+  getWorklet,
 } from './helpers.mjs';
 import { getNoiseMix, getNoiseOscillator } from './noise.mjs';
 
diff --git a/packages/superdough/worklets.mjs b/packages/superdough/worklets.mjs
index a1f524ca..a2b7828c 100644
--- a/packages/superdough/worklets.mjs
+++ b/packages/superdough/worklets.mjs
@@ -1,7 +1,145 @@
 // coarse, crush, and shape processors adapted from dktr0's webdirt: https://github.com/dktr0/WebDirt/blob/5ce3d698362c54d6e1b68acc47eb2955ac62c793/dist/AudioWorklets.js
 // LICENSE GNU General Public License v3.0 see https://github.com/dktr0/WebDirt/blob/main/LICENSE
+// TOFIX: THIS FILE DOES NOT SUPPORT IMPORTS ON DEPOLYMENT
+
+import OLAProcessor from './ola-processor';
+import FFT from './fft.js';
+
+const clamp = (num, min, max) => Math.min(Math.max(num, min), max);
+const _mod = (n, m) => ((n % m) + m) % m;
 
 const blockSize = 128;
+// adjust waveshape to remove frequencies above nyquist to prevent aliasing
+// referenced from https://www.kvraudio.com/forum/viewtopic.php?t=375517
+function polyBlep(phase, dt) {
+  // 0 <= phase < 1
+  if (phase < dt) {
+    phase /= dt;
+    // 2 * (phase - phase^2/2 - 0.5)
+    return phase + phase - phase * phase - 1;
+  }
+
+  // -1 < phase < 0
+  else if (phase > 1 - dt) {
+    phase = (phase - 1) / dt;
+    // 2 * (phase^2/2 + phase + 0.5)
+    return phase * phase + phase + phase + 1;
+  }
+
+  // 0 otherwise
+  else {
+    return 0;
+  }
+}
+
+const waveshapes = {
+  tri(phase, skew = 0.5) {
+    const x = 1 - skew;
+    if (phase >= skew) {
+      return 1 / x - phase / x;
+    }
+    return phase / skew;
+  },
+  sine(phase) {
+    return Math.sin(Math.PI * 2 * phase) * 0.5 + 0.5;
+  },
+  ramp(phase) {
+    return phase;
+  },
+  saw(phase) {
+    return 1 - phase;
+  },
+
+  square(phase, skew = 0.5) {
+    if (phase >= skew) {
+      return 0;
+    }
+    return 1;
+  },
+  custom(phase, values = [0, 1]) {
+    const numParts = values.length - 1;
+    const currPart = Math.floor(phase * numParts);
+
+    const partLength = 1 / numParts;
+    const startVal = clamp(values[currPart], 0, 1);
+    const endVal = clamp(values[currPart + 1], 0, 1);
+    const y2 = endVal;
+    const y1 = startVal;
+    const x1 = 0;
+    const x2 = partLength;
+    const slope = (y2 - y1) / (x2 - x1);
+    return slope * (phase - partLength * currPart) + startVal;
+  },
+  sawblep(phase, dt) {
+    const v = 2 * phase - 1;
+    return v - polyBlep(phase, dt);
+  },
+};
+
+const waveShapeNames = Object.keys(waveshapes);
+class LFOProcessor extends AudioWorkletProcessor {
+  static get parameterDescriptors() {
+    return [
+      { name: 'time', defaultValue: 0 },
+      { name: 'end', defaultValue: 0 },
+      { name: 'frequency', defaultValue: 0.5 },
+      { name: 'skew', defaultValue: 0.5 },
+      { name: 'depth', defaultValue: 1 },
+      { name: 'phaseoffset', defaultValue: 0 },
+      { name: 'shape', defaultValue: 0 },
+      { name: 'dcoffset', defaultValue: 0 },
+    ];
+  }
+
+  constructor() {
+    super();
+    this.phase;
+  }
+
+  incrementPhase(dt) {
+    this.phase += dt;
+    if (this.phase > 1.0) {
+      this.phase = this.phase - 1;
+    }
+  }
+
+  process(inputs, outputs, parameters) {
+    // eslint-disable-next-line no-undef
+    if (currentTime >= parameters.end[0]) {
+      return false;
+    }
+
+    const output = outputs[0];
+    const frequency = parameters['frequency'][0];
+
+    const time = parameters['time'][0];
+    const depth = parameters['depth'][0];
+    const skew = parameters['skew'][0];
+    const phaseoffset = parameters['phaseoffset'][0];
+
+    const dcoffset = parameters['dcoffset'][0];
+    const shape = waveShapeNames[parameters['shape'][0]];
+
+    const blockSize = output[0].length ?? 0;
+
+    if (this.phase == null) {
+      this.phase = _mod(time * frequency + phaseoffset, 1);
+    }
+    // eslint-disable-next-line no-undef
+    const dt = frequency / sampleRate;
+    for (let n = 0; n < blockSize; n++) {
+      for (let i = 0; i < output.length; i++) {
+        const modval = (waveshapes[shape](this.phase, skew) + dcoffset) * depth;
+        output[i][n] = modval;
+      }
+      this.incrementPhase(dt);
+    }
+
+    return true;
+  }
+}
+registerProcessor('lfo-processor', LFOProcessor);
+
 class CoarseProcessor extends AudioWorkletProcessor {
   static get parameterDescriptors() {
     return [{ name: 'coarse', defaultValue: 1 }];
@@ -106,6 +244,77 @@ class ShapeProcessor extends AudioWorkletProcessor {
 }
 registerProcessor('shape-processor', ShapeProcessor);
 
+function fast_tanh(x) {
+  const x2 = x * x;
+  return (x * (27.0 + x2)) / (27.0 + 9.0 * x2);
+}
+const _PI = 3.14159265359;
+//adapted from https://github.com/TheBouteillacBear/webaudioworklet-wasm?tab=MIT-1-ov-file
+class LadderProcessor extends AudioWorkletProcessor {
+  static get parameterDescriptors() {
+    return [
+      { name: 'frequency', defaultValue: 500 },
+      { name: 'q', defaultValue: 1 },
+      { name: 'drive', defaultValue: 0.69 },
+    ];
+  }
+
+  constructor() {
+    super();
+    this.started = false;
+    this.p0 = [0, 0];
+    this.p1 = [0, 0];
+    this.p2 = [0, 0];
+    this.p3 = [0, 0];
+    this.p32 = [0, 0];
+    this.p33 = [0, 0];
+    this.p34 = [0, 0];
+  }
+
+  process(inputs, outputs, parameters) {
+    const input = inputs[0];
+    const output = outputs[0];
+
+    const hasInput = !(input[0] === undefined);
+    if (this.started && !hasInput) {
+      return false;
+    }
+
+    this.started = hasInput;
+
+    const resonance = parameters.q[0];
+    const drive = clamp(Math.exp(parameters.drive[0]), 0.1, 2000);
+
+    let cutoff = parameters.frequency[0];
+    // eslint-disable-next-line no-undef
+    cutoff = (cutoff * 2 * _PI) / sampleRate;
+    cutoff = cutoff > 1 ? 1 : cutoff;
+
+    const k = Math.min(8, resonance * 0.4);
+    //               drive makeup  * resonance volume loss makeup
+    let makeupgain = (1 / drive) * Math.min(1.75, 1 + k);
+
+    for (let n = 0; n < blockSize; n++) {
+      for (let i = 0; i < input.length; i++) {
+        const out = this.p3[i] * 0.360891 + this.p32[i] * 0.41729 + this.p33[i] * 0.177896 + this.p34[i] * 0.0439725;
+
+        this.p34[i] = this.p33[i];
+        this.p33[i] = this.p32[i];
+        this.p32[i] = this.p3[i];
+
+        this.p0[i] += (fast_tanh(input[i][n] * drive - k * out) - fast_tanh(this.p0[i])) * cutoff;
+        this.p1[i] += (fast_tanh(this.p0[i]) - fast_tanh(this.p1[i])) * cutoff;
+        this.p2[i] += (fast_tanh(this.p1[i]) - fast_tanh(this.p2[i])) * cutoff;
+        this.p3[i] += (fast_tanh(this.p2[i]) - fast_tanh(this.p3[i])) * cutoff;
+
+        output[i][n] = out * makeupgain;
+      }
+    }
+    return true;
+  }
+}
+registerProcessor('ladder-processor', LadderProcessor);
+
 class DistortProcessor extends AudioWorkletProcessor {
   static get parameterDescriptors() {
     return [
@@ -142,34 +351,7 @@ class DistortProcessor extends AudioWorkletProcessor {
 }
 registerProcessor('distort-processor', DistortProcessor);
 
-// adjust waveshape to remove frequencies above nyquist to prevent aliasing
-// referenced from https://www.kvraudio.com/forum/viewtopic.php?t=375517
-const polyBlep = (phase, dt) => {
-  // 0 <= phase < 1
-  if (phase < dt) {
-    phase /= dt;
-    // 2 * (phase - phase^2/2 - 0.5)
-    return phase + phase - phase * phase - 1;
-  }
-
-  // -1 < phase < 0
-  else if (phase > 1 - dt) {
-    phase = (phase - 1) / dt;
-    // 2 * (phase^2/2 + phase + 0.5)
-    return phase * phase + phase + phase + 1;
-  }
-
-  // 0 otherwise
-  else {
-    return 0;
-  }
-};
-
-const saw = (phase, dt) => {
-  const v = 2 * phase - 1;
-  return v - polyBlep(phase, dt);
-};
-
+// SUPERSAW
 function lerp(a, b, n) {
   return n * (b - a) + a;
 }
@@ -269,7 +451,7 @@ class SuperSawOscillatorProcessor extends AudioWorkletProcessor {
 
       for (let i = 0; i < output[0].length; i++) {
         this.phase[n] = this.phase[n] ?? Math.random();
-        const v = saw(this.phase[n], dt);
+        const v = waveshapes.sawblep(this.phase[n], dt);
 
         output[0][i] = output[0][i] + v * gainL;
         output[1][i] = output[1][i] + v * gainR;
@@ -286,3 +468,183 @@ class SuperSawOscillatorProcessor extends AudioWorkletProcessor {
 }
 
 registerProcessor('supersaw-oscillator', SuperSawOscillatorProcessor);
+
+// Phase Vocoder sourced from // sourced from https://github.com/olvb/phaze/tree/master?tab=readme-ov-file
+const BUFFERED_BLOCK_SIZE = 2048;
+
+function genHannWindow(length) {
+  let win = new Float32Array(length);
+  for (var i = 0; i < length; i++) {
+    win[i] = 0.5 * (1 - Math.cos((2 * Math.PI * i) / length));
+  }
+  return win;
+}
+
+class PhaseVocoderProcessor extends OLAProcessor {
+  static get parameterDescriptors() {
+    return [
+      {
+        name: 'pitchFactor',
+        defaultValue: 1.0,
+      },
+    ];
+  }
+
+  constructor(options) {
+    options.processorOptions = {
+      blockSize: BUFFERED_BLOCK_SIZE,
+    };
+    super(options);
+
+    this.fftSize = this.blockSize;
+    this.timeCursor = 0;
+
+    this.hannWindow = genHannWindow(this.blockSize);
+    // prepare FFT and pre-allocate buffers
+    this.fft = new FFT(this.fftSize);
+    this.freqComplexBuffer = this.fft.createComplexArray();
+    this.freqComplexBufferShifted = this.fft.createComplexArray();
+    this.timeComplexBuffer = this.fft.createComplexArray();
+    this.magnitudes = new Float32Array(this.fftSize / 2 + 1);
+    this.peakIndexes = new Int32Array(this.magnitudes.length);
+    this.nbPeaks = 0;
+  }
+
+  processOLA(inputs, outputs, parameters) {
+    // no automation, take last value
+
+    let pitchFactor = parameters.pitchFactor[parameters.pitchFactor.length - 1];
+
+    if (pitchFactor < 0) {
+      pitchFactor = pitchFactor * 0.25;
+    }
+    pitchFactor = Math.max(0, pitchFactor + 1);
+
+    for (var i = 0; i < this.nbInputs; i++) {
+      for (var j = 0; j < inputs[i].length; j++) {
+        // big assumption here: output is symetric to input
+        var input = inputs[i][j];
+        var output = outputs[i][j];
+
+        this.applyHannWindow(input);
+
+        this.fft.realTransform(this.freqComplexBuffer, input);
+
+        this.computeMagnitudes();
+        this.findPeaks();
+        this.shiftPeaks(pitchFactor);
+
+        this.fft.completeSpectrum(this.freqComplexBufferShifted);
+        this.fft.inverseTransform(this.timeComplexBuffer, this.freqComplexBufferShifted);
+        this.fft.fromComplexArray(this.timeComplexBuffer, output);
+        this.applyHannWindow(output);
+      }
+    }
+
+    this.timeCursor += this.hopSize;
+  }
+
+  /** Apply Hann window in-place */
+  applyHannWindow(input) {
+    for (var i = 0; i < this.blockSize; i++) {
+      input[i] = input[i] * this.hannWindow[i] * 1.62;
+    }
+  }
+
+  /** Compute squared magnitudes for peak finding **/
+  computeMagnitudes() {
+    var i = 0,
+      j = 0;
+    while (i < this.magnitudes.length) {
+      let real = this.freqComplexBuffer[j];
+      let imag = this.freqComplexBuffer[j + 1];
+      // no need to sqrt for peak finding
+      this.magnitudes[i] = real ** 2 + imag ** 2;
+      i += 1;
+      j += 2;
+    }
+  }
+
+  /** Find peaks in spectrum magnitudes **/
+  findPeaks() {
+    this.nbPeaks = 0;
+    var i = 2;
+    let end = this.magnitudes.length - 2;
+
+    while (i < end) {
+      let mag = this.magnitudes[i];
+
+      if (this.magnitudes[i - 1] >= mag || this.magnitudes[i - 2] >= mag) {
+        i++;
+        continue;
+      }
+      if (this.magnitudes[i + 1] >= mag || this.magnitudes[i + 2] >= mag) {
+        i++;
+        continue;
+      }
+
+      this.peakIndexes[this.nbPeaks] = i;
+      this.nbPeaks++;
+      i += 2;
+    }
+  }
+
+  /** Shift peaks and regions of influence by pitchFactor into new specturm */
+  shiftPeaks(pitchFactor) {
+    // zero-fill new spectrum
+    this.freqComplexBufferShifted.fill(0);
+
+    for (var i = 0; i < this.nbPeaks; i++) {
+      let peakIndex = this.peakIndexes[i];
+      let peakIndexShifted = Math.round(peakIndex * pitchFactor);
+
+      if (peakIndexShifted > this.magnitudes.length) {
+        break;
+      }
+
+      // find region of influence
+      var startIndex = 0;
+      var endIndex = this.fftSize;
+      if (i > 0) {
+        let peakIndexBefore = this.peakIndexes[i - 1];
+        startIndex = peakIndex - Math.floor((peakIndex - peakIndexBefore) / 2);
+      }
+      if (i < this.nbPeaks - 1) {
+        let peakIndexAfter = this.peakIndexes[i + 1];
+        endIndex = peakIndex + Math.ceil((peakIndexAfter - peakIndex) / 2);
+      }
+
+      // shift whole region of influence around peak to shifted peak
+      let startOffset = startIndex - peakIndex;
+      let endOffset = endIndex - peakIndex;
+      for (var j = startOffset; j < endOffset; j++) {
+        let binIndex = peakIndex + j;
+        let binIndexShifted = peakIndexShifted + j;
+
+        if (binIndexShifted >= this.magnitudes.length) {
+          break;
+        }
+
+        // apply phase correction
+        let omegaDelta = (2 * Math.PI * (binIndexShifted - binIndex)) / this.fftSize;
+        let phaseShiftReal = Math.cos(omegaDelta * this.timeCursor);
+        let phaseShiftImag = Math.sin(omegaDelta * this.timeCursor);
+
+        let indexReal = binIndex * 2;
+        let indexImag = indexReal + 1;
+        let valueReal = this.freqComplexBuffer[indexReal];
+        let valueImag = this.freqComplexBuffer[indexImag];
+
+        let valueShiftedReal = valueReal * phaseShiftReal - valueImag * phaseShiftImag;
+        let valueShiftedImag = valueReal * phaseShiftImag + valueImag * phaseShiftReal;
+
+        let indexShiftedReal = binIndexShifted * 2;
+        let indexShiftedImag = indexShiftedReal + 1;
+        this.freqComplexBufferShifted[indexShiftedReal] += valueShiftedReal;
+        this.freqComplexBufferShifted[indexShiftedImag] += valueShiftedImag;
+      }
+    }
+  }
+}
+
+registerProcessor('phase-vocoder-processor', PhaseVocoderProcessor);
diff --git a/packages/tidal/package.json b/packages/tidal/package.json
new file mode 100644
index 00000000..051c6143
--- /dev/null
+++ b/packages/tidal/package.json
@@ -0,0 +1,28 @@
+{
+  "name": "@strudel/tidal",
+  "version": "0.1.0",
+  "description": "Experimental Tidal Code interpreter",
+  "module": "tidal.mjs",
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/felixroos/hs2js.git"
+  },
+  "keywords": [
+    "haskell",
+    "javascript"
+  ],
+  "author": "Felix Roos ",
+  "license": "AGPL-3.0-or-later",
+  "bugs": {
+    "url": "https://github.com/tidalcycles/strudel/issues"
+  },
+  "homepage": "https://github.com/tidalcycles/strudel/tree/main/packages/hs2js",
+  "dependencies": {
+    "@strudel/core": "workspace:*",
+    "@strudel/mini": "workspace:*",
+    "hs2js": "workspace:*"
+  },
+  "devDependencies": {
+    "vite": "^5.0.10"
+  }
+}
diff --git a/packages/tidal/tidal.mjs b/packages/tidal/tidal.mjs
new file mode 100644
index 00000000..576d7814
--- /dev/null
+++ b/packages/tidal/tidal.mjs
@@ -0,0 +1,73 @@
+import { reify } from '@strudel/core';
+import { m } from '@strudel/mini';
+import { loadParser, evaluate } from 'hs2js';
+
+function getInfixOperators() {
+  let operators = {
+    '>': 'set',
+    '#': 'set',
+    '+': 'add',
+    '-': 'sub',
+    '*': 'mul',
+    '/': 'div',
+  };
+  let alignments = {
+    in: (s) => '|' + s,
+    out: (s) => s + '|',
+    mix: (s) => '|' + s + '|',
+  };
+  let ops = {};
+  Object.entries(operators).forEach(([o, name]) => {
+    // operator without alignment
+    ops[o] = (l, r) => reify(l)[name](reify(r));
+    Object.entries(alignments).forEach(([a, getSymbol]) => {
+      // get symbol with alignment
+      let symbol = getSymbol(o);
+      ops[symbol] = (l, r) => reify(l)[name][a](reify(r));
+    });
+  });
+  ops['~>'] = (l, r) => reify(l).late(reify(r));
+  ops['<~'] = (l, r) => reify(l).early(reify(r));
+  ops['<$>'] = (l, r) => reify(r).fmap(l).outerJoin(); // is this right?
+  return ops;
+}
+const ops = getInfixOperators();
+
+export async function initTidal() {
+  // TODO: implement this in regular land
+  window.d1 = (pat) => pat.p('d1');
+  window.d2 = (pat) => pat.p('d2');
+  window.d3 = (pat) => pat.p('d3');
+  window.d4 = (pat) => pat.p('d4');
+  window.d5 = (pat) => pat.p('d5');
+  window.d6 = (pat) => pat.p('d6');
+  window.d7 = (pat) => pat.p('d7');
+  window.d8 = (pat) => pat.p('d8');
+  window.d9 = (pat) => pat.p('d9');
+  return loadParser();
+}
+
+// offset is expected to be passed in from transpiler
+/* 
+1. acorn parses JS to find location of tidal call
+2. haskell-tree-sitter calls "string" function with node (including location)
+3. m function sets locations for individual mini notation atom
+
+so the location for a mini notation atom is:
+
+js offset + hs offset + atom offset
+*/
+export function tidal(code, offset = 0) {
+  if (Array.isArray(code)) {
+    code = code.join('');
+  }
+  return evaluate(code, window, {
+    ...ops,
+    string: (node) => {
+      // parses strings as mini notation and passes location
+      const str = node.text.slice(1, -1);
+      const col = node.startIndex + offset;
+      return m(str, col);
+    },
+  });
+}
diff --git a/packages/tonal/package.json b/packages/tonal/package.json
index e4418228..d21f2e1c 100644
--- a/packages/tonal/package.json
+++ b/packages/tonal/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@strudel/tonal",
-  "version": "1.0.1",
+  "version": "1.1.0",
   "description": "Tonal functions for strudel",
   "main": "index.mjs",
   "publishConfig": {
@@ -37,6 +37,6 @@
   },
   "devDependencies": {
     "vite": "^5.0.10",
-    "vitest": "^1.1.0"
+    "vitest": "^2.1.3"
   }
 }
diff --git a/packages/transpiler/package.json b/packages/transpiler/package.json
index 12038fc4..9aeb7ebf 100644
--- a/packages/transpiler/package.json
+++ b/packages/transpiler/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@strudel/transpiler",
-  "version": "1.0.1",
+  "version": "1.1.0",
   "description": "Transpiler for strudel user code. Converts syntactically correct but semantically meaningless JS into evaluatable strudel code.",
   "main": "index.mjs",
   "type": "module",
@@ -38,6 +38,6 @@
   },
   "devDependencies": {
     "vite": "^5.0.10",
-    "vitest": "^1.1.0"
+    "vitest": "^2.1.3"
   }
 }
diff --git a/packages/transpiler/transpiler.mjs b/packages/transpiler/transpiler.mjs
index 95156664..2e566305 100644
--- a/packages/transpiler/transpiler.mjs
+++ b/packages/transpiler/transpiler.mjs
@@ -26,6 +26,16 @@ export function transpiler(input, options = {}) {
 
   walk(ast, {
     enter(node, parent /* , prop, index */) {
+      if (isTidalTeplateLiteral(node)) {
+        const raw = node.quasi.quasis[0].value.raw;
+        const offset = node.quasi.start + 1;
+        if (emitMiniLocations) {
+          const stringLocs = collectHaskellMiniLocations(raw, offset);
+          miniLocations = miniLocations.concat(stringLocs);
+        }
+        this.skip();
+        return this.replace(tidalWithLocation(raw, offset));
+      }
       if (isBackTickString(node, parent)) {
         const { quasis } = node;
         const { raw } = quasis[0].value;
@@ -59,6 +69,7 @@ export function transpiler(input, options = {}) {
           to: node.end,
           index,
           type,
+          id: options.id,
         };
         emitWidgets && widgets.push(widgetConfig);
         return this.replace(widgetWithLocation(node, widgetConfig));
@@ -152,7 +163,7 @@ export function getWidgetID(widgetConfig) {
   // that means, if we use the index index of line position as id, less garbage is generated
   // return `widget_${widgetConfig.to}`; // more gargabe
   //return `widget_${widgetConfig.index}_${widgetConfig.to}`; // also more garbage
-  return `widget_${widgetConfig.type}_${widgetConfig.index}`; // less garbage
+  return `${widgetConfig.id || ''}_widget_${widgetConfig.type}_${widgetConfig.index}`; // less garbage
 }
 
 function widgetWithLocation(node, widgetConfig) {
@@ -207,3 +218,47 @@ function labelToP(node) {
     },
   };
 }
+
+// tidal highlighting
+// this feels kind of stupid, when we also know the location inside the string op (tidal.mjs)
+// but maybe it's the only way
+
+function isTidalTeplateLiteral(node) {
+  return node.type === 'TaggedTemplateExpression' && node.tag.name === 'tidal';
+}
+
+function collectHaskellMiniLocations(haskellCode, offset) {
+  return haskellCode
+    .split('')
+    .reduce((acc, char, i) => {
+      if (char !== '"') {
+        return acc;
+      }
+      if (!acc.length || acc[acc.length - 1].length > 1) {
+        acc.push([i + 1]);
+      } else {
+        acc[acc.length - 1].push(i);
+      }
+      return acc;
+    }, [])
+    .map(([start, end]) => {
+      const miniString = haskellCode.slice(start, end);
+      return getLeafLocations(`"${miniString}"`, offset + start - 1);
+    })
+    .flat();
+}
+
+function tidalWithLocation(value, offset) {
+  return {
+    type: 'CallExpression',
+    callee: {
+      type: 'Identifier',
+      name: 'tidal',
+    },
+    arguments: [
+      { type: 'Literal', value },
+      { type: 'Literal', value: offset },
+    ],
+    optional: false,
+  };
+}
diff --git a/packages/web/README.md b/packages/web/README.md
index 8b567729..659c8271 100644
--- a/packages/web/README.md
+++ b/packages/web/README.md
@@ -72,7 +72,13 @@ document.getElementById('play').addEventListener('stop',
 There is a tiny difference between the [Strudel REPL](https://strudel.cc/) and `@strudel/web`.
 In the REPL you can use 'single quotes' for regular JS strings and "double quotes" for mini notation patterns.
 In `@strudel/web`, it does not matter which types of quotes you're using.
-There will probably be an escapte hatch for that in the future.
+
+This difference means that you cannot call pattern methods on raw strings, for example `"1 2 3".slow(2)`.
+To make it work you can either:
+
+1. Use the `evaluate` function, which behaves exactly like the Strudel REPL, interpreting double quoted strings as mini notation.
+2. wrap the string with `m`: `m("1 2 3").slow(2)`
+3. wrap the string in a control function: `n("1 2 3").slow(2)` depending on your context.
 
 ## More Examples
 
diff --git a/packages/web/package.json b/packages/web/package.json
index d70e84c8..17dd49cb 100644
--- a/packages/web/package.json
+++ b/packages/web/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@strudel/web",
-  "version": "1.0.3",
+  "version": "1.1.0",
   "description": "Easy to setup, opiniated bundle of Strudel for the browser.",
   "module": "web.mjs",
   "publishConfig": {
@@ -40,7 +40,7 @@
     "@strudel/webaudio": "workspace:*"
   },
   "devDependencies": {
-    "vite": "^5.0.10",
-    "@rollup/plugin-replace": "^5.0.5"
+    "@rollup/plugin-replace": "^5.0.5",
+    "vite": "^5.0.10"
   }
 }
diff --git a/packages/web/vite.config.js b/packages/web/vite.config.js
index bd14f5a9..99b93956 100644
--- a/packages/web/vite.config.js
+++ b/packages/web/vite.config.js
@@ -5,6 +5,7 @@ import replace from '@rollup/plugin-replace';
 
 // https://vitejs.dev/config/
 export default defineConfig({
+  base: './',
   plugins: [],
   build: {
     lib: {
diff --git a/packages/web/web.mjs b/packages/web/web.mjs
index 660acf26..2e2df84d 100644
--- a/packages/web/web.mjs
+++ b/packages/web/web.mjs
@@ -5,10 +5,10 @@ export * from '@strudel/transpiler';
 export * from '@strudel/mini';
 export * from '@strudel/tonal';
 export * from '@strudel/webaudio';
-import { Pattern, evalScope } from '@strudel/core';
-import { initAudioOnFirstClick, registerSynthSounds, webaudioScheduler } from '@strudel/webaudio';
+import { Pattern, evalScope, setTime } from '@strudel/core';
+import { initAudioOnFirstClick, registerSynthSounds, webaudioRepl } from '@strudel/webaudio';
 // import { registerSoundfonts } from '@strudel/soundfonts';
-import { evaluate as _evaluate } from '@strudel/transpiler';
+import { evaluate as _evaluate, transpiler } from '@strudel/transpiler';
 import { miniAllStrings } from '@strudel/mini';
 
 // init logic
@@ -27,39 +27,40 @@ export async function defaultPrebake() {
 // when this function finishes, everything is initialized
 let initDone;
 
-let scheduler;
+let repl;
 export function initStrudel(options = {}) {
   initAudioOnFirstClick();
-  miniAllStrings();
-  const { prebake, ...schedulerOptions } = options;
-
+  options.miniAllStrings !== false && miniAllStrings();
+  const { prebake, ...replOptions } = options;
+  repl = webaudioRepl({ ...replOptions, transpiler });
   initDone = (async () => {
     await defaultPrebake();
     await prebake?.();
+    return repl;
   })();
-  scheduler = webaudioScheduler(schedulerOptions);
+  setTime(() => repl.scheduler.now());
+  return initDone;
 }
 
 window.initStrudel = initStrudel;
 
 // this method will play the pattern on the default scheduler
 Pattern.prototype.play = function () {
-  if (!scheduler) {
-    throw new Error('.play: no scheduler found. Have you called init?');
+  if (!repl) {
+    throw new Error('.play: no repl found. Have you called initStrudel?');
   }
   initDone.then(() => {
-    scheduler.setPattern(this, true);
+    repl.setPattern(this, true);
   });
   return this;
 };
 
 // stop playback
 export function hush() {
-  scheduler.stop();
+  repl.stop();
 }
 
 // evaluate and play the given code using the transpiler
 export async function evaluate(code, autoplay = true) {
-  const { pattern } = await _evaluate(code);
-  autoplay && pattern.play();
+  return repl.evaluate(code, autoplay);
 }
diff --git a/packages/webaudio/index.mjs b/packages/webaudio/index.mjs
index a425e683..59672b61 100644
--- a/packages/webaudio/index.mjs
+++ b/packages/webaudio/index.mjs
@@ -6,4 +6,5 @@ This program is free software: you can redistribute it and/or modify it under th
 
 export * from './webaudio.mjs';
 export * from './scope.mjs';
+export * from './spectrum.mjs';
 export * from 'superdough';
diff --git a/packages/webaudio/package.json b/packages/webaudio/package.json
index f9cd7cc7..019768c1 100644
--- a/packages/webaudio/package.json
+++ b/packages/webaudio/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@strudel/webaudio",
-  "version": "1.0.1",
+  "version": "1.1.0",
   "description": "Web Audio helpers for Strudel",
   "main": "index.mjs",
   "type": "module",
diff --git a/packages/webaudio/scope.mjs b/packages/webaudio/scope.mjs
index fbf4c8fc..e423b20f 100644
--- a/packages/webaudio/scope.mjs
+++ b/packages/webaudio/scope.mjs
@@ -130,7 +130,7 @@ Pattern.prototype.fscope = function (config = {}) {
  * @param {number} pos y-position relative to screen height. 0 = top, 1 = bottom of screen
  * @param {number} trigger amplitude value that is used to align the scope. defaults to 0.
  * @example
- * s("sawtooth").scope()
+ * s("sawtooth")._scope()
  */
 let latestColor = {};
 Pattern.prototype.tscope = function (config = {}) {
diff --git a/packages/webaudio/spectrum.mjs b/packages/webaudio/spectrum.mjs
new file mode 100644
index 00000000..2ddd214f
--- /dev/null
+++ b/packages/webaudio/spectrum.mjs
@@ -0,0 +1,69 @@
+import { Pattern, clamp } from '@strudel/core';
+import { getDrawContext, getTheme } from '@strudel/draw';
+import { analysers, getAnalyzerData } from 'superdough';
+
+/**
+ * Renders a spectrum analyzer for the incoming audio signal.
+ * @name spectrum
+ * @param {object} config optional config with options:
+ * @param {integer} thickness line thickness in px (default 3)
+ * @param {integer} speed scroll speed (default 1)
+ * @param {integer} min min db (default -80)
+ * @param {integer} max max db (default 0)
+ * @example
+ * n("<0 4 <2 3> 1>*3")
+ * .off(1/8, add(n(5)))
+ * .off(1/5, add(n(7)))
+ * .scale("d3:minor:pentatonic")
+ * .s('sine')
+ * .dec(.3).room(.5)
+ * ._spectrum()
+ */
+let latestColor = {};
+Pattern.prototype.spectrum = function (config = {}) {
+  let id = config.id ?? 1;
+  return this.analyze(id).draw(
+    (haps) => {
+      config.color = haps[0]?.value?.color || latestColor[id] || getTheme().foreground;
+      latestColor[id] = config.color;
+      drawSpectrum(analysers[id], config);
+    },
+    { id },
+  );
+};
+
+Pattern.prototype.scope = Pattern.prototype.tscope;
+
+const lastFrames = new Map();
+
+function drawSpectrum(
+  analyser,
+  { thickness = 3, speed = 1, min = -80, max = 0, ctx = getDrawContext(), id = 1, color } = {},
+) {
+  ctx.lineWidth = thickness;
+  ctx.strokeStyle = color;
+
+  if (!analyser) {
+    // if analyser is undefined, draw straight line
+    // it may be undefined when no sound has been played yet
+    return;
+  }
+  const scrollSize = speed;
+  const dataArray = getAnalyzerData('frequency', id);
+  const canvas = ctx.canvas;
+  ctx.fillStyle = color;
+  const bufferSize = analyser.frequencyBinCount;
+  let imageData = lastFrames.get(id) || ctx.getImageData(0, 0, canvas.width, canvas.height);
+  lastFrames.set(id, imageData);
+  ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
+  ctx.putImageData(imageData, -scrollSize, 0);
+  let q = canvas.width - speed;
+  for (let i = 0; i < bufferSize; i++) {
+    const normalized = clamp((dataArray[i] - min) / (max - min), 0, 1);
+    ctx.globalAlpha = normalized;
+    const next = (Math.log(i + 1) / Math.log(bufferSize)) * canvas.height;
+    const size = 2; //next - pos;
+    ctx.fillRect(q, canvas.height - next, scrollSize, size);
+  }
+  lastFrames.set(id, ctx.getImageData(0, 0, canvas.width, canvas.height));
+}
diff --git a/packages/webaudio/webaudio.mjs b/packages/webaudio/webaudio.mjs
index f82a436a..44a68348 100644
--- a/packages/webaudio/webaudio.mjs
+++ b/packages/webaudio/webaudio.mjs
@@ -6,7 +6,7 @@ This program is free software: you can redistribute it and/or modify it under th
 
 import * as strudel from '@strudel/core';
 import { superdough, getAudioContext, setLogger, doughTrigger } from 'superdough';
-const { Pattern, logger } = strudel;
+const { Pattern, logger, repl } = strudel;
 
 setLogger(logger);
 
@@ -24,17 +24,13 @@ Pattern.prototype.webaudio = function () {
   return this.onTrigger(webaudioOutputTrigger);
 };
 
-export function webaudioScheduler(options = {}) {
+export function webaudioRepl(options = {}) {
   options = {
     getTime: () => getAudioContext().currentTime,
     defaultOutput: webaudioOutput,
     ...options,
   };
-  const { defaultOutput, getTime } = options;
-  return new strudel.Cyclist({
-    ...options,
-    onTrigger: strudel.getTrigger({ defaultOutput, getTime }),
-  });
+  return repl(options);
 }
 
 Pattern.prototype.dough = function () {
diff --git a/packages/xen/package.json b/packages/xen/package.json
index 8ee5d8a3..418166c8 100644
--- a/packages/xen/package.json
+++ b/packages/xen/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@strudel/xen",
-  "version": "1.0.1",
+  "version": "1.1.0",
   "description": "Xenharmonic API for strudel",
   "main": "index.mjs",
   "type": "module",
@@ -34,6 +34,6 @@
   },
   "devDependencies": {
     "vite": "^5.0.10",
-    "vitest": "^1.1.0"
+    "vitest": "^2.1.3"
   }
 }
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 74697ee6..a18f06e7 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1,4 +1,4 @@
-lockfileVersion: '6.0'
+lockfileVersion: '9.0'
 
 settings:
   autoInstallPeers: true
@@ -29,46 +29,46 @@ importers:
     devDependencies:
       '@tauri-apps/cli':
         specifier: ^1.5.9
-        version: 1.5.9
+        version: 1.6.3
       '@vitest/ui':
-        specifier: ^1.1.0
-        version: 1.1.0(vitest@1.1.0)
+        specifier: ^2.1.3
+        version: 2.1.3(vitest@2.1.3)
       acorn:
-        specifier: ^8.11.3
-        version: 8.11.3
+        specifier: ^8.13.0
+        version: 8.13.0
       dependency-tree:
         specifier: ^10.0.9
         version: 10.0.9
       eslint:
         specifier: ^8.56.0
-        version: 8.56.0
+        version: 8.57.1
       eslint-plugin-import:
-        specifier: ^2.29.1
-        version: 2.29.1(eslint@8.56.0)
+        specifier: ^2.31.0
+        version: 2.31.0(eslint@8.57.1)
       events:
         specifier: ^3.3.0
         version: 3.3.0
       jsdoc:
-        specifier: ^4.0.2
-        version: 4.0.2
+        specifier: ^4.0.3
+        version: 4.0.3
       jsdoc-json:
         specifier: ^2.0.2
         version: 2.0.2
       jsdoc-to-markdown:
         specifier: ^8.0.0
-        version: 8.0.0
+        version: 8.0.3
       lerna:
-        specifier: ^8.0.1
-        version: 8.0.1
+        specifier: ^8.1.8
+        version: 8.1.8(encoding@0.1.13)
       prettier:
-        specifier: ^3.1.1
-        version: 3.1.1
+        specifier: ^3.3.3
+        version: 3.3.3
       rollup-plugin-visualizer:
         specifier: ^5.12.0
-        version: 5.12.0
+        version: 5.12.0(rollup@4.24.0)
       vitest:
-        specifier: ^1.1.0
-        version: 1.1.0(@vitest/ui@1.1.0)
+        specifier: ^2.1.3
+        version: 2.1.3(@types/node@22.7.6)(@vitest/ui@2.1.3)(terser@5.36.0)
 
   examples/codemirror-repl:
     dependencies:
@@ -78,6 +78,9 @@ importers:
       '@strudel/core':
         specifier: workspace:*
         version: link:../../packages/core
+      '@strudel/draw':
+        specifier: workspace:*
+        version: link:../../packages/draw
       '@strudel/mini':
         specifier: workspace:*
         version: link:../../packages/mini
@@ -96,7 +99,7 @@ importers:
     devDependencies:
       vite:
         specifier: ^5.0.10
-        version: 5.0.10
+        version: 5.4.9(@types/node@22.7.6)(terser@5.36.0)
 
   examples/headless-repl:
     dependencies:
@@ -106,7 +109,7 @@ importers:
     devDependencies:
       vite:
         specifier: ^5.0.10
-        version: 5.0.10
+        version: 5.4.9(@types/node@22.7.6)(terser@5.36.0)
 
   examples/minimal-repl:
     dependencies:
@@ -128,7 +131,7 @@ importers:
     devDependencies:
       vite:
         specifier: ^5.0.10
-        version: 5.0.10
+        version: 5.4.9(@types/node@22.7.6)(terser@5.36.0)
 
   examples/superdough:
     dependencies:
@@ -138,46 +141,59 @@ importers:
     devDependencies:
       vite:
         specifier: ^5.0.10
-        version: 5.0.10
+        version: 5.4.9(@types/node@22.7.6)(terser@5.36.0)
+
+  examples/tidal-repl:
+    dependencies:
+      '@strudel/web':
+        specifier: workspace:*
+        version: link:../../packages/web
+      hs2js:
+        specifier: workspace:*
+        version: link:../../packages/hs2js
+    devDependencies:
+      vite:
+        specifier: ^5.0.8
+        version: 5.4.9(@types/node@22.7.6)(terser@5.36.0)
 
   packages/codemirror:
     dependencies:
       '@codemirror/autocomplete':
         specifier: ^6.11.1
-        version: 6.11.1(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)(@lezer/common@1.2.0)
+        version: 6.18.1(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)(@lezer/common@1.0.2)
       '@codemirror/commands':
         specifier: ^6.3.3
-        version: 6.3.3
+        version: 6.7.0
       '@codemirror/lang-javascript':
         specifier: ^6.2.1
-        version: 6.2.1
+        version: 6.2.2
       '@codemirror/language':
         specifier: ^6.10.0
-        version: 6.10.0
+        version: 6.10.3
       '@codemirror/search':
         specifier: ^6.5.5
-        version: 6.5.5
+        version: 6.5.6
       '@codemirror/state':
         specifier: ^6.4.0
-        version: 6.4.0
+        version: 6.4.1
       '@codemirror/view':
         specifier: ^6.23.0
-        version: 6.23.0
+        version: 6.34.1
       '@lezer/highlight':
         specifier: ^1.2.0
-        version: 1.2.0
+        version: 1.2.1
       '@nanostores/persistent':
         specifier: ^0.9.1
         version: 0.9.1(nanostores@0.9.5)
       '@replit/codemirror-emacs':
         specifier: ^6.0.1
-        version: 6.0.1(@codemirror/autocomplete@6.11.1)(@codemirror/commands@6.3.3)(@codemirror/search@6.5.5)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+        version: 6.1.0(@codemirror/autocomplete@6.18.1(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)(@lezer/common@1.0.2))(@codemirror/commands@6.7.0)(@codemirror/search@6.5.6)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
       '@replit/codemirror-vim':
         specifier: ^6.1.0
-        version: 6.1.0(@codemirror/commands@6.3.3)(@codemirror/language@6.10.0)(@codemirror/search@6.5.5)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+        version: 6.2.1(@codemirror/commands@6.7.0)(@codemirror/language@6.10.3)(@codemirror/search@6.5.6)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
       '@replit/codemirror-vscode-keymap':
         specifier: ^6.0.2
-        version: 6.0.2(@codemirror/autocomplete@6.11.1)(@codemirror/commands@6.3.3)(@codemirror/language@6.10.0)(@codemirror/lint@6.4.2)(@codemirror/search@6.5.5)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+        version: 6.0.2(@codemirror/autocomplete@6.18.1(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)(@lezer/common@1.0.2))(@codemirror/commands@6.7.0)(@codemirror/language@6.10.3)(@codemirror/lint@6.4.2)(@codemirror/search@6.5.6)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
       '@strudel/core':
         specifier: workspace:*
         version: link:../core
@@ -189,17 +205,17 @@ importers:
         version: link:../transpiler
       '@uiw/codemirror-themes':
         specifier: ^4.21.21
-        version: 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+        version: 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
       '@uiw/codemirror-themes-all':
         specifier: ^4.21.21
-        version: 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+        version: 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
       nanostores:
         specifier: ^0.9.5
         version: 0.9.5
     devDependencies:
       vite:
         specifier: ^5.0.10
-        version: 5.0.10
+        version: 5.4.9(@types/node@22.7.6)(terser@5.36.0)
 
   packages/core:
     dependencies:
@@ -209,16 +225,16 @@ importers:
     devDependencies:
       vite:
         specifier: ^5.0.10
-        version: 5.0.10
+        version: 5.4.9(@types/node@22.7.6)(terser@5.36.0)
       vitest:
-        specifier: ^1.1.0
-        version: 1.1.0(@vitest/ui@1.1.0)
+        specifier: ^2.1.3
+        version: 2.1.3(@types/node@22.7.6)(@vitest/ui@2.1.3)(terser@5.36.0)
 
   packages/csound:
     dependencies:
       '@csound/browser':
         specifier: 6.18.7
-        version: 6.18.7(eslint@8.56.0)
+        version: 6.18.7(eslint@9.13.0(jiti@1.21.0))
       '@strudel/core':
         specifier: workspace:*
         version: link:../core
@@ -228,7 +244,7 @@ importers:
     devDependencies:
       vite:
         specifier: ^5.0.10
-        version: 5.0.10
+        version: 5.4.9(@types/node@22.7.6)(terser@5.36.0)
 
   packages/desktopbridge:
     dependencies:
@@ -237,7 +253,7 @@ importers:
         version: link:../core
       '@tauri-apps/api':
         specifier: ^1.5.3
-        version: 1.5.3
+        version: 1.6.0
 
   packages/draw:
     dependencies:
@@ -247,10 +263,23 @@ importers:
     devDependencies:
       vite:
         specifier: ^5.0.10
-        version: 5.0.11
+        version: 5.4.9(@types/node@22.7.6)(terser@5.36.0)
 
   packages/embed: {}
 
+  packages/hs2js:
+    dependencies:
+      web-tree-sitter:
+        specifier: ^0.20.8
+        version: 0.20.8
+    devDependencies:
+      tree-sitter-haskell:
+        specifier: ^0.21.0
+        version: 0.21.0(tree-sitter@0.21.1)
+      vite:
+        specifier: ^5.0.10
+        version: 5.4.9(@types/node@22.7.6)(terser@5.36.0)
+
   packages/hydra:
     dependencies:
       '@strudel/core':
@@ -265,10 +294,10 @@ importers:
     devDependencies:
       pkg:
         specifier: ^5.8.1
-        version: 5.8.1
+        version: 5.8.1(encoding@0.1.13)
       vite:
         specifier: ^5.0.10
-        version: 5.0.10
+        version: 5.4.9(@types/node@22.7.6)(terser@5.36.0)
 
   packages/midi:
     dependencies:
@@ -280,11 +309,11 @@ importers:
         version: link:../webaudio
       webmidi:
         specifier: ^3.1.8
-        version: 3.1.8
+        version: 3.1.11
     devDependencies:
       vite:
         specifier: ^5.0.10
-        version: 5.0.10
+        version: 5.4.9(@types/node@22.7.6)(terser@5.36.0)
 
   packages/mini:
     dependencies:
@@ -297,10 +326,10 @@ importers:
         version: 3.0.2
       vite:
         specifier: ^5.0.10
-        version: 5.0.10
+        version: 5.4.9(@types/node@22.7.6)(terser@5.36.0)
       vitest:
-        specifier: ^1.1.0
-        version: 1.1.0(@vitest/ui@1.1.0)
+        specifier: ^2.1.3
+        version: 2.1.3(@types/node@22.7.6)(@vitest/ui@2.1.3)(terser@5.36.0)
 
   packages/osc:
     dependencies:
@@ -309,14 +338,14 @@ importers:
         version: link:../core
       osc-js:
         specifier: ^2.4.0
-        version: 2.4.0
+        version: 2.4.1
     devDependencies:
       pkg:
         specifier: ^5.8.1
-        version: 5.8.1
+        version: 5.8.1(encoding@0.1.13)
       vite:
         specifier: ^5.0.10
-        version: 5.0.10
+        version: 5.4.9(@types/node@22.7.6)(terser@5.36.0)
 
   packages/repl:
     dependencies:
@@ -353,13 +382,13 @@ importers:
     devDependencies:
       '@rollup/plugin-replace':
         specifier: ^5.0.5
-        version: 5.0.5
+        version: 5.0.7(rollup@4.24.0)
       rollup-plugin-visualizer:
         specifier: ^5.12.0
-        version: 5.12.0
+        version: 5.12.0(rollup@4.24.0)
       vite:
         specifier: ^5.0.10
-        version: 5.0.10
+        version: 5.4.9(@types/node@22.7.6)(terser@5.36.0)
 
   packages/sampler:
     dependencies:
@@ -375,7 +404,7 @@ importers:
     devDependencies:
       vite:
         specifier: ^5.0.10
-        version: 5.0.10
+        version: 5.4.9(@types/node@22.7.6)(terser@5.36.0)
 
   packages/soundfonts:
     dependencies:
@@ -397,7 +426,7 @@ importers:
         version: 3.3.2
       vite:
         specifier: ^5.0.10
-        version: 5.0.10
+        version: 5.4.9(@types/node@22.7.6)(terser@5.36.0)
 
   packages/superdough:
     dependencies:
@@ -407,7 +436,23 @@ importers:
     devDependencies:
       vite:
         specifier: ^5.0.10
-        version: 5.0.10
+        version: 5.4.9(@types/node@22.7.6)(terser@5.36.0)
+
+  packages/tidal:
+    dependencies:
+      '@strudel/core':
+        specifier: workspace:*
+        version: link:../core
+      '@strudel/mini':
+        specifier: workspace:*
+        version: link:../mini
+      hs2js:
+        specifier: workspace:*
+        version: link:../hs2js
+    devDependencies:
+      vite:
+        specifier: ^5.0.10
+        version: 5.4.9(@types/node@22.7.6)(terser@5.36.0)
 
   packages/tonal:
     dependencies:
@@ -422,14 +467,14 @@ importers:
         version: 0.0.1
       webmidi:
         specifier: ^3.1.8
-        version: 3.1.8
+        version: 3.1.11
     devDependencies:
       vite:
         specifier: ^5.0.10
-        version: 5.0.10
+        version: 5.4.9(@types/node@22.7.6)(terser@5.36.0)
       vitest:
-        specifier: ^1.1.0
-        version: 1.1.0(@vitest/ui@1.1.0)
+        specifier: ^2.1.3
+        version: 2.1.3(@types/node@22.7.6)(@vitest/ui@2.1.3)(terser@5.36.0)
 
   packages/transpiler:
     dependencies:
@@ -441,7 +486,7 @@ importers:
         version: link:../mini
       acorn:
         specifier: ^8.11.3
-        version: 8.11.3
+        version: 8.13.0
       escodegen:
         specifier: ^2.1.0
         version: 2.1.0
@@ -451,10 +496,10 @@ importers:
     devDependencies:
       vite:
         specifier: ^5.0.10
-        version: 5.0.10
+        version: 5.4.9(@types/node@22.7.6)(terser@5.36.0)
       vitest:
-        specifier: ^1.1.0
-        version: 1.1.0(@vitest/ui@1.1.0)
+        specifier: ^2.1.3
+        version: 2.1.3(@types/node@22.7.6)(@vitest/ui@2.1.3)(terser@5.36.0)
 
   packages/web:
     dependencies:
@@ -476,10 +521,10 @@ importers:
     devDependencies:
       '@rollup/plugin-replace':
         specifier: ^5.0.5
-        version: 5.0.5
+        version: 5.0.7(rollup@4.24.0)
       vite:
         specifier: ^5.0.10
-        version: 5.0.10
+        version: 5.4.9(@types/node@22.7.6)(terser@5.36.0)
 
   packages/webaudio:
     dependencies:
@@ -495,7 +540,7 @@ importers:
     devDependencies:
       vite:
         specifier: ^5.0.10
-        version: 5.0.10
+        version: 5.4.9(@types/node@22.7.6)(terser@5.36.0)
 
   packages/xen:
     dependencies:
@@ -505,16 +550,16 @@ importers:
     devDependencies:
       vite:
         specifier: ^5.0.10
-        version: 5.0.10
+        version: 5.4.9(@types/node@22.7.6)(terser@5.36.0)
       vitest:
-        specifier: ^1.1.0
-        version: 1.1.0(@vitest/ui@1.1.0)
+        specifier: ^2.1.3
+        version: 2.1.3(@types/node@22.7.6)(@vitest/ui@2.1.3)(terser@5.36.0)
 
   tools/dbpatch:
     dependencies:
       csv:
         specifier: ^6.3.6
-        version: 6.3.6
+        version: 6.3.10
 
   website:
     dependencies:
@@ -523,37 +568,37 @@ importers:
         version: 4.22.0
       '@astro-community/astro-embed-youtube':
         specifier: ^0.4.4
-        version: 0.4.4(astro@4.0.8)
+        version: 0.4.5(astro@4.16.6(@types/node@20.16.12)(rollup@2.79.2)(terser@5.36.0)(typescript@5.6.3))
       '@astrojs/mdx':
         specifier: ^2.0.3
-        version: 2.2.1(astro@4.0.8)
+        version: 2.3.1(astro@4.16.6(@types/node@20.16.12)(rollup@2.79.2)(terser@5.36.0)(typescript@5.6.3))
       '@astrojs/react':
         specifier: ^3.0.9
-        version: 3.0.9(@types/react-dom@18.2.18)(@types/react@18.2.46)(react-dom@18.2.0)(react@18.2.0)(vite@5.2.2)
+        version: 3.6.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vite@5.4.9(@types/node@20.16.12)(terser@5.36.0))
       '@astrojs/rss':
         specifier: ^4.0.2
-        version: 4.0.2
+        version: 4.0.9
       '@astrojs/tailwind':
         specifier: ^5.1.0
-        version: 5.1.0(astro@4.0.8)(tailwindcss@3.4.0)
+        version: 5.1.2(astro@4.16.6(@types/node@20.16.12)(rollup@2.79.2)(terser@5.36.0)(typescript@5.6.3))(tailwindcss@3.4.14)
       '@docsearch/css':
         specifier: ^3.5.2
-        version: 3.5.2
+        version: 3.6.2
       '@docsearch/react':
         specifier: ^3.5.2
-        version: 3.5.2(@algolia/client-search@4.22.0)(@types/react@18.2.46)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.13.0)
+        version: 3.6.2(@algolia/client-search@4.22.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0)
       '@headlessui/react':
         specifier: ^1.7.17
-        version: 1.7.17(react-dom@18.2.0)(react@18.2.0)
+        version: 1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       '@heroicons/react':
         specifier: ^2.1.1
-        version: 2.1.1(react@18.2.0)
+        version: 2.1.5(react@18.3.1)
       '@nanostores/persistent':
         specifier: ^0.9.1
         version: 0.9.1(nanostores@0.9.5)
       '@nanostores/react':
         specifier: ^0.7.1
-        version: 0.7.1(nanostores@0.9.5)(react@18.2.0)
+        version: 0.7.3(nanostores@0.9.5)(react@18.3.1)
       '@strudel/codemirror':
         specifier: workspace:*
         version: link:../packages/codemirror
@@ -587,6 +632,9 @@ importers:
       '@strudel/soundfonts':
         specifier: workspace:*
         version: link:../packages/soundfonts
+      '@strudel/tidal':
+        specifier: workspace:*
+        version: link:../packages/tidal
       '@strudel/tonal':
         specifier: workspace:*
         version: link:../packages/tonal
@@ -601,52 +649,55 @@ importers:
         version: link:../packages/xen
       '@supabase/supabase-js':
         specifier: ^2.39.1
-        version: 2.39.1
+        version: 2.45.5
       '@tailwindcss/forms':
         specifier: ^0.5.7
-        version: 0.5.7(tailwindcss@3.4.0)
+        version: 0.5.9(tailwindcss@3.4.14)
       '@tailwindcss/typography':
         specifier: ^0.5.10
-        version: 0.5.10(tailwindcss@3.4.0)
+        version: 0.5.15(tailwindcss@3.4.14)
       '@tauri-apps/api':
         specifier: ^1.5.3
-        version: 1.5.3
+        version: 1.6.0
       '@types/node':
         specifier: ^20.10.6
-        version: 20.10.6
+        version: 20.16.12
       '@types/react':
         specifier: ^18.2.46
-        version: 18.2.46
+        version: 18.3.11
       '@types/react-dom':
         specifier: ^18.2.18
-        version: 18.2.18
+        version: 18.3.1
       astro:
         specifier: ^4.0.8
-        version: 4.0.8(@types/node@20.10.6)(typescript@5.3.3)
+        version: 4.16.6(@types/node@20.16.12)(rollup@2.79.2)(terser@5.36.0)(typescript@5.6.3)
       claviature:
         specifier: ^0.1.0
         version: 0.1.0
       date-fns:
         specifier: ^3.2.0
-        version: 3.2.0
+        version: 3.6.0
+      hs2js:
+        specifier: 0.0.8
+        version: 0.0.8
       nanoid:
         specifier: ^5.0.4
-        version: 5.0.4
+        version: 5.0.7
       nanostores:
         specifier: ^0.9.5
         version: 0.9.5
       react:
         specifier: ^18.2.0
-        version: 18.2.0
+        version: 18.3.1
       react-dom:
         specifier: ^18.2.0
-        version: 18.2.0(react@18.2.0)
+        version: 18.3.1(react@18.3.1)
       react-hook-inview:
         specifier: ^4.5.0
-        version: 4.5.0(react-dom@18.2.0)(react@18.2.0)
+        version: 4.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       react-lite-youtube-embed:
         specifier: ^2.4.0
-        version: 2.4.0(react-dom@18.2.0)(react@18.2.0)
+        version: 2.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
       rehype-autolink-headings:
         specifier: ^7.1.0
         version: 7.1.0
@@ -661,1726 +712,767 @@ importers:
         version: 9.0.0
       tailwindcss:
         specifier: ^3.4.0
-        version: 3.4.0
+        version: 3.4.14
       worker-timers:
         specifier: ^7.1.4
-        version: 7.1.4
+        version: 7.1.8
     devDependencies:
       '@vite-pwa/astro':
         specifier: ^0.2.0
-        version: 0.2.0(astro@4.0.8)(vite-plugin-pwa@0.17.4)
+        version: 0.2.0(astro@4.16.6(@types/node@20.16.12)(rollup@2.79.2)(terser@5.36.0)(typescript@5.6.3))(vite-plugin-pwa@0.17.5(vite@5.4.9(@types/node@20.16.12)(terser@5.36.0))(workbox-build@7.0.0(@types/babel__core@7.20.5))(workbox-window@7.1.0))
       html-escaper:
         specifier: ^3.0.3
         version: 3.0.3
       sharp:
         specifier: ^0.33.1
-        version: 0.33.1
+        version: 0.33.5
       vite-plugin-pwa:
         specifier: ^0.17.4
-        version: 0.17.4(vite@5.2.2)(workbox-build@7.0.0)(workbox-window@7.0.0)
+        version: 0.17.5(vite@5.4.9(@types/node@20.16.12)(terser@5.36.0))(workbox-build@7.0.0(@types/babel__core@7.20.5))(workbox-window@7.1.0)
       workbox-window:
         specifier: ^7.0.0
-        version: 7.0.0
+        version: 7.1.0
 
 packages:
 
-  /@aashutoshrathi/word-wrap@1.2.6:
+  '@aashutoshrathi/word-wrap@1.2.6':
     resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==}
     engines: {node: '>=0.10.0'}
 
-  /@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.22.0)(search-insights@2.13.0):
+  '@algolia/autocomplete-core@1.9.3':
     resolution: {integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==}
-    dependencies:
-      '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.22.0)(search-insights@2.13.0)
-      '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.22.0)
-    transitivePeerDependencies:
-      - '@algolia/client-search'
-      - algoliasearch
-      - search-insights
-    dev: false
 
-  /@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.22.0)(search-insights@2.13.0):
+  '@algolia/autocomplete-plugin-algolia-insights@1.9.3':
     resolution: {integrity: sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==}
     peerDependencies:
       search-insights: '>= 1 < 3'
-    dependencies:
-      '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.22.0)
-      search-insights: 2.13.0
-    transitivePeerDependencies:
-      - '@algolia/client-search'
-      - algoliasearch
-    dev: false
 
-  /@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.22.0):
+  '@algolia/autocomplete-preset-algolia@1.9.3':
     resolution: {integrity: sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==}
     peerDependencies:
       '@algolia/client-search': '>= 4.9.1 < 6'
       algoliasearch: '>= 4.9.1 < 6'
-    dependencies:
-      '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.22.0)
-      '@algolia/client-search': 4.22.0
-      algoliasearch: 4.22.0
-    dev: false
 
-  /@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.22.0):
+  '@algolia/autocomplete-shared@1.9.3':
     resolution: {integrity: sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==}
     peerDependencies:
       '@algolia/client-search': '>= 4.9.1 < 6'
       algoliasearch: '>= 4.9.1 < 6'
-    dependencies:
-      '@algolia/client-search': 4.22.0
-      algoliasearch: 4.22.0
-    dev: false
 
-  /@algolia/cache-browser-local-storage@4.22.0:
+  '@algolia/cache-browser-local-storage@4.22.0':
     resolution: {integrity: sha512-uZ1uZMLDZb4qODLfTSNHxSi4fH9RdrQf7DXEzW01dS8XK7QFtFh29N5NGKa9S+Yudf1vUMIF+/RiL4i/J0pWlQ==}
-    dependencies:
-      '@algolia/cache-common': 4.22.0
-    dev: false
 
-  /@algolia/cache-common@4.22.0:
+  '@algolia/cache-common@4.22.0':
     resolution: {integrity: sha512-TPwUMlIGPN16eW67qamNQUmxNiGHg/WBqWcrOoCddhqNTqGDPVqmgfaM85LPbt24t3r1z0zEz/tdsmuq3Q6oaA==}
-    dev: false
 
-  /@algolia/cache-in-memory@4.22.0:
+  '@algolia/cache-in-memory@4.22.0':
     resolution: {integrity: sha512-kf4Cio9NpPjzp1+uXQgL4jsMDeck7MP89BYThSvXSjf2A6qV/0KeqQf90TL2ECS02ovLOBXkk98P7qVarM+zGA==}
-    dependencies:
-      '@algolia/cache-common': 4.22.0
-    dev: false
 
-  /@algolia/client-account@4.22.0:
+  '@algolia/client-account@4.22.0':
     resolution: {integrity: sha512-Bjb5UXpWmJT+yGWiqAJL0prkENyEZTBzdC+N1vBuHjwIJcjLMjPB6j1hNBRbT12Lmwi55uzqeMIKS69w+0aPzA==}
-    dependencies:
-      '@algolia/client-common': 4.22.0
-      '@algolia/client-search': 4.22.0
-      '@algolia/transporter': 4.22.0
-    dev: false
 
-  /@algolia/client-analytics@4.22.0:
+  '@algolia/client-analytics@4.22.0':
     resolution: {integrity: sha512-os2K+kHUcwwRa4ArFl5p/3YbF9lN3TLOPkbXXXxOvDpqFh62n9IRZuzfxpHxMPKAQS3Et1s0BkKavnNP02E9Hg==}
-    dependencies:
-      '@algolia/client-common': 4.22.0
-      '@algolia/client-search': 4.22.0
-      '@algolia/requester-common': 4.22.0
-      '@algolia/transporter': 4.22.0
-    dev: false
 
-  /@algolia/client-common@4.22.0:
+  '@algolia/client-common@4.22.0':
     resolution: {integrity: sha512-BlbkF4qXVWuwTmYxVWvqtatCR3lzXwxx628p1wj1Q7QP2+LsTmGt1DiUYRuy9jG7iMsnlExby6kRMOOlbhv2Ag==}
-    dependencies:
-      '@algolia/requester-common': 4.22.0
-      '@algolia/transporter': 4.22.0
-    dev: false
 
-  /@algolia/client-personalization@4.22.0:
+  '@algolia/client-personalization@4.22.0':
     resolution: {integrity: sha512-pEOftCxeBdG5pL97WngOBi9w5Vxr5KCV2j2D+xMVZH8MuU/JX7CglDSDDb0ffQWYqcUN+40Ry+xtXEYaGXTGow==}
-    dependencies:
-      '@algolia/client-common': 4.22.0
-      '@algolia/requester-common': 4.22.0
-      '@algolia/transporter': 4.22.0
-    dev: false
 
-  /@algolia/client-search@4.22.0:
+  '@algolia/client-search@4.22.0':
     resolution: {integrity: sha512-bn4qQiIdRPBGCwsNuuqB8rdHhGKKWIij9OqidM1UkQxnSG8yzxHdb7CujM30pvp5EnV7jTqDZRbxacbjYVW20Q==}
-    dependencies:
-      '@algolia/client-common': 4.22.0
-      '@algolia/requester-common': 4.22.0
-      '@algolia/transporter': 4.22.0
-    dev: false
 
-  /@algolia/logger-common@4.22.0:
+  '@algolia/logger-common@4.22.0':
     resolution: {integrity: sha512-HMUQTID0ucxNCXs5d1eBJ5q/HuKg8rFVE/vOiLaM4Abfeq1YnTtGV3+rFEhOPWhRQxNDd+YHa4q864IMc0zHpQ==}
-    dev: false
 
-  /@algolia/logger-console@4.22.0:
+  '@algolia/logger-console@4.22.0':
     resolution: {integrity: sha512-7JKb6hgcY64H7CRm3u6DRAiiEVXMvCJV5gRE672QFOUgDxo4aiDpfU61g6Uzy8NKjlEzHMmgG4e2fklELmPXhQ==}
-    dependencies:
-      '@algolia/logger-common': 4.22.0
-    dev: false
 
-  /@algolia/requester-browser-xhr@4.22.0:
+  '@algolia/requester-browser-xhr@4.22.0':
     resolution: {integrity: sha512-BHfv1h7P9/SyvcDJDaRuIwDu2yrDLlXlYmjvaLZTtPw6Ok/ZVhBR55JqW832XN/Fsl6k3LjdkYHHR7xnsa5Wvg==}
-    dependencies:
-      '@algolia/requester-common': 4.22.0
-    dev: false
 
-  /@algolia/requester-common@4.22.0:
+  '@algolia/requester-common@4.22.0':
     resolution: {integrity: sha512-Y9cEH/cKjIIZgzvI1aI0ARdtR/xRrOR13g5psCxkdhpgRN0Vcorx+zePhmAa4jdQNqexpxtkUdcKYugBzMZJgQ==}
-    dev: false
 
-  /@algolia/requester-node-http@4.22.0:
+  '@algolia/requester-node-http@4.22.0':
     resolution: {integrity: sha512-8xHoGpxVhz3u2MYIieHIB6MsnX+vfd5PS4REgglejJ6lPigftRhTdBCToe6zbwq4p0anZXjjPDvNWMlgK2+xYA==}
-    dependencies:
-      '@algolia/requester-common': 4.22.0
-    dev: false
 
-  /@algolia/transporter@4.22.0:
+  '@algolia/transporter@4.22.0':
     resolution: {integrity: sha512-ieO1k8x2o77GNvOoC+vAkFKppydQSVfbjM3YrSjLmgywiBejPTvU1R1nEvG59JIIUvtSLrZsLGPkd6vL14zopA==}
-    dependencies:
-      '@algolia/cache-common': 4.22.0
-      '@algolia/logger-common': 4.22.0
-      '@algolia/requester-common': 4.22.0
-    dev: false
 
-  /@alloc/quick-lru@5.2.0:
+  '@alloc/quick-lru@5.2.0':
     resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
     engines: {node: '>=10'}
-    dev: false
 
-  /@ampproject/remapping@2.2.0:
-    resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==}
+  '@ampproject/remapping@2.3.0':
+    resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
     engines: {node: '>=6.0.0'}
-    dependencies:
-      '@jridgewell/gen-mapping': 0.1.1
-      '@jridgewell/trace-mapping': 0.3.20
 
-  /@apideck/better-ajv-errors@0.3.6(ajv@8.12.0):
+  '@apideck/better-ajv-errors@0.3.6':
     resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==}
     engines: {node: '>=10'}
     peerDependencies:
       ajv: '>=8'
-    dependencies:
-      ajv: 8.12.0
-      json-schema: 0.4.0
-      jsonpointer: 5.0.1
-      leven: 3.1.0
-    dev: true
 
-  /@astro-community/astro-embed-youtube@0.4.4(astro@4.0.8):
-    resolution: {integrity: sha512-fYlycLrJFNnibZ9VHPSJO766kO2IgqYQU4mBd4iaDMaicL0gGX9cVZ80QdnpzGrI6w0XOJOY7prx86eWEVBy8w==}
+  '@astro-community/astro-embed-youtube@0.4.5':
+    resolution: {integrity: sha512-YD2g9a8aiUvypYb4wSobqCKhItDomdrdy62eHFaEGlqMrxP3eT+GUYUsjFxw7Yj/KwTzMjeqbgZlav11MwQgOg==}
     peerDependencies:
       astro: ^2.0.0 || ^3.0.0-beta || ^4.0.0-beta
-    dependencies:
-      astro: 4.0.8(@types/node@20.10.6)(typescript@5.3.3)
-      lite-youtube-embed: 0.2.0
-    dev: false
 
-  /@astrojs/compiler@2.3.4:
-    resolution: {integrity: sha512-33/YtWoBCE0cBUNy1kh78FCDXBoBANX87ShgATlAHECYbG2+buNTAgq4Xgz4t5NgnEHPN21GIBC2Mvvwisoutw==}
+  '@astrojs/compiler@2.10.3':
+    resolution: {integrity: sha512-bL/O7YBxsFt55YHU021oL+xz+B/9HvGNId3F9xURN16aeqDK9juHGktdkCSXz+U4nqFACq6ZFvWomOzhV+zfPw==}
 
-  /@astrojs/internal-helpers@0.2.1:
-    resolution: {integrity: sha512-06DD2ZnItMwUnH81LBLco3tWjcZ1lGU9rLCCBaeUCGYe9cI0wKyY2W3kDyoW1I6GmcWgt1fu+D1CTvz+FIKf8A==}
+  '@astrojs/internal-helpers@0.4.1':
+    resolution: {integrity: sha512-bMf9jFihO8YP940uD70SI/RDzIhUHJAolWVcO1v5PUivxGKvfLZTLTVVxEYzGYyPsA3ivdLNqMnL5VgmQySa+g==}
 
-  /@astrojs/markdown-remark@4.0.1:
-    resolution: {integrity: sha512-RU4ESnqvyLpj8WZs0n5elS6idaDdtIIm7mIpMaRNPCebpxMjfcfdwcmBwz83ktAj5d2eO5bC3z92TcGdli+lRw==}
-    dependencies:
-      '@astrojs/prism': 3.0.0
-      github-slugger: 2.0.0
-      import-meta-resolve: 4.0.0
-      mdast-util-definitions: 6.0.0
-      rehype-raw: 7.0.0
-      rehype-stringify: 10.0.0
-      remark-gfm: 4.0.0
-      remark-parse: 11.0.0
-      remark-rehype: 11.0.0
-      remark-smartypants: 2.0.0
-      shikiji: 0.6.13
-      unified: 11.0.4
-      unist-util-visit: 5.0.0
-      vfile: 6.0.1
-    transitivePeerDependencies:
-      - supports-color
+  '@astrojs/markdown-remark@5.1.0':
+    resolution: {integrity: sha512-S6Z3K2hOB7MfjeDoHsotnP/q2UsnEDB8NlNAaCjMDsGBZfTUbWxyLW3CaphEWw08f6KLZi2ibK9yC3BaMhh2NQ==}
 
-  /@astrojs/markdown-remark@4.3.1:
-    resolution: {integrity: sha512-eJFi600tkRjTFiwzY9oD8AgCgB7gFqyWCKWuZ33dATVBgLiROD+zlMZ8STZzU7+ZALvmiUAun/K7umTmP5YfVQ==}
-    dependencies:
-      '@astrojs/prism': 3.0.0
-      github-slugger: 2.0.0
-      hast-util-from-html: 2.0.1
-      hast-util-to-text: 4.0.0
-      import-meta-resolve: 4.0.0
-      mdast-util-definitions: 6.0.0
-      rehype-raw: 7.0.0
-      rehype-stringify: 10.0.0
-      remark-gfm: 4.0.0
-      remark-parse: 11.0.0
-      remark-rehype: 11.0.0
-      remark-smartypants: 2.0.0
-      shiki: 1.2.0
-      unified: 11.0.4
-      unist-util-remove-position: 5.0.0
-      unist-util-visit: 5.0.0
-      unist-util-visit-parents: 6.0.1
-      vfile: 6.0.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: false
+  '@astrojs/markdown-remark@5.3.0':
+    resolution: {integrity: sha512-r0Ikqr0e6ozPb5bvhup1qdWnSPUvQu6tub4ZLYaKyG50BXZ0ej6FhGz3GpChKpH7kglRFPObJd/bDyf2VM9pkg==}
 
-  /@astrojs/mdx@2.2.1(astro@4.0.8):
-    resolution: {integrity: sha512-bSr/AkvGieD9Pc5ZzMnAk7IHnw0vyt/aOujuYUmYT+NHiWahAUy/+ywNNMhTMmea0irdMYnBVC1AEKMQ/oXxow==}
-    engines: {node: '>=18.14.1'}
+  '@astrojs/mdx@2.3.1':
+    resolution: {integrity: sha512-BOQFKD2Pi9cRntNQJlpF2fh4xV8doNpmVy9NKI95r4jsitrY4X5aTOhAowi+fkQgP/zW1A4HwCyQ6Pdam6z8zQ==}
+    engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0}
     peerDependencies:
       astro: ^4.0.0
-    dependencies:
-      '@astrojs/markdown-remark': 4.3.1
-      '@mdx-js/mdx': 3.0.0
-      acorn: 8.11.3
-      astro: 4.0.8(@types/node@20.10.6)(typescript@5.3.3)
-      es-module-lexer: 1.4.1
-      estree-util-visit: 2.0.0
-      github-slugger: 2.0.0
-      gray-matter: 4.0.3
-      hast-util-to-html: 9.0.0
-      kleur: 4.1.5
-      rehype-raw: 7.0.0
-      remark-gfm: 4.0.0
-      remark-smartypants: 2.0.0
-      source-map: 0.7.4
-      unist-util-visit: 5.0.0
-      vfile: 6.0.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: false
 
-  /@astrojs/prism@3.0.0:
-    resolution: {integrity: sha512-g61lZupWq1bYbcBnYZqdjndShr/J3l/oFobBKPA3+qMat146zce3nz2kdO4giGbhYDt4gYdhmoBz0vZJ4sIurQ==}
-    engines: {node: '>=18.14.1'}
-    dependencies:
-      prismjs: 1.29.0
+  '@astrojs/prism@3.1.0':
+    resolution: {integrity: sha512-Z9IYjuXSArkAUx3N6xj6+Bnvx8OdUSHA8YoOgyepp3+zJmtVYJIl/I18GozdJVW1p5u/CNpl3Km7/gwTJK85cw==}
+    engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0}
 
-  /@astrojs/react@3.0.9(@types/react-dom@18.2.18)(@types/react@18.2.46)(react-dom@18.2.0)(react@18.2.0)(vite@5.2.2):
-    resolution: {integrity: sha512-31J5yF5p9yBFV1axBooLA9PB4B2+MYm7swWhtlezSsJiUNXRFo5Is9qI3teJ7cKgmaCv+ZA593Smskko0NGaDQ==}
-    engines: {node: '>=18.14.1'}
+  '@astrojs/react@3.6.2':
+    resolution: {integrity: sha512-fK29lYI7zK/KG4ZBy956x4dmauZcZ18osFkuyGa8r3gmmCQa2NZ9XNu9WaVYEUm0j89f4Gii4tbxLoyM8nk2MA==}
+    engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0}
     peerDependencies:
       '@types/react': ^17.0.50 || ^18.0.21
       '@types/react-dom': ^17.0.17 || ^18.0.6
-      react: ^17.0.2 || ^18.0.0
-      react-dom: ^17.0.2 || ^18.0.0
-    dependencies:
-      '@types/react': 18.2.46
-      '@types/react-dom': 18.2.18
-      '@vitejs/plugin-react': 4.2.1(vite@5.2.2)
-      react: 18.2.0
-      react-dom: 18.2.0(react@18.2.0)
-      ultrahtml: 1.5.2
-    transitivePeerDependencies:
-      - supports-color
-      - vite
-    dev: false
+      react: ^17.0.2 || ^18.0.0 || ^19.0.0-beta
+      react-dom: ^17.0.2 || ^18.0.0 || ^19.0.0-beta
 
-  /@astrojs/rss@4.0.2:
-    resolution: {integrity: sha512-Hb9GKAyvsn5EUjZtB6SniesBScMQe7SQinEHLY5EFa74QEvgcWaXTmA0Mb0P3vqDSN3d/NTYbGivprrSAawfnA==}
-    dependencies:
-      fast-xml-parser: 4.3.3
-      kleur: 4.1.5
-    dev: false
+  '@astrojs/rss@4.0.9':
+    resolution: {integrity: sha512-W1qeLc/WP1vMS5xXa+BnaLU0paeSeGjN8RJVAoBaOIkQuKXjIUA9hvPno89heo73in5i67g40gy70oeeHMqp6A==}
 
-  /@astrojs/tailwind@5.1.0(astro@4.0.8)(tailwindcss@3.4.0):
-    resolution: {integrity: sha512-BJoCDKuWhU9FT2qYg+fr6Nfb3qP4ShtyjXGHKA/4mHN94z7BGcmauQK23iy+YH5qWvTnhqkd6mQPQ1yTZTe9Ig==}
+  '@astrojs/tailwind@5.1.2':
+    resolution: {integrity: sha512-IvOF0W/dtHElcXvhrPR35nHmhyV3cfz1EzPitMGtU7sYy9Hci3BNK1To6FWmVuuNKPxza1IgCGetSynJZL7fOg==}
     peerDependencies:
-      astro: ^3.0.0 || ^4.0.0
+      astro: ^3.0.0 || ^4.0.0 || ^5.0.0-beta.0
       tailwindcss: ^3.0.24
-    dependencies:
-      astro: 4.0.8(@types/node@20.10.6)(typescript@5.3.3)
-      autoprefixer: 10.4.16(postcss@8.4.32)
-      postcss: 8.4.32
-      postcss-load-config: 4.0.2(postcss@8.4.32)
-      tailwindcss: 3.4.0
-    transitivePeerDependencies:
-      - ts-node
-    dev: false
 
-  /@astrojs/telemetry@3.0.4:
-    resolution: {integrity: sha512-A+0c7k/Xy293xx6odsYZuXiaHO0PL+bnDoXOc47sGDF5ffIKdKQGRPFl2NMlCF4L0NqN4Ynbgnaip+pPF0s7pQ==}
-    engines: {node: '>=18.14.1'}
-    dependencies:
-      ci-info: 3.9.0
-      debug: 4.3.4
-      dlv: 1.1.3
-      dset: 3.1.3
-      is-docker: 3.0.0
-      is-wsl: 3.1.0
-      which-pm-runs: 1.1.0
-    transitivePeerDependencies:
-      - supports-color
+  '@astrojs/telemetry@3.1.0':
+    resolution: {integrity: sha512-/ca/+D8MIKEC8/A9cSaPUqQNZm+Es/ZinRv0ZAzvu2ios7POQSsVD+VOj7/hypWNsNM3T7RpfgNq7H2TU1KEHA==}
+    engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0}
 
-  /@babel/code-frame@7.23.5:
+  '@babel/code-frame@7.23.5':
     resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==}
     engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/highlight': 7.23.4
-      chalk: 2.4.2
 
-  /@babel/compat-data@7.23.5:
-    resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==}
+  '@babel/code-frame@7.25.7':
+    resolution: {integrity: sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==}
     engines: {node: '>=6.9.0'}
 
-  /@babel/core@7.23.7:
-    resolution: {integrity: sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==}
+  '@babel/compat-data@7.25.8':
+    resolution: {integrity: sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==}
     engines: {node: '>=6.9.0'}
-    dependencies:
-      '@ampproject/remapping': 2.2.0
-      '@babel/code-frame': 7.23.5
-      '@babel/generator': 7.23.6
-      '@babel/helper-compilation-targets': 7.23.6
-      '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7)
-      '@babel/helpers': 7.23.7
-      '@babel/parser': 7.23.6
-      '@babel/template': 7.22.15
-      '@babel/traverse': 7.23.7
-      '@babel/types': 7.23.6
-      convert-source-map: 2.0.0
-      debug: 4.3.4
-      gensync: 1.0.0-beta.2
-      json5: 2.2.3
-      semver: 6.3.1
-    transitivePeerDependencies:
-      - supports-color
 
-  /@babel/generator@7.18.2:
+  '@babel/core@7.25.8':
+    resolution: {integrity: sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg==}
+    engines: {node: '>=6.9.0'}
+
+  '@babel/generator@7.18.2':
     resolution: {integrity: sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==}
     engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': 7.21.5
-      '@jridgewell/gen-mapping': 0.3.2
-      jsesc: 2.5.2
-    dev: true
 
-  /@babel/generator@7.23.6:
-    resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==}
+  '@babel/generator@7.25.7':
+    resolution: {integrity: sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==}
     engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': 7.23.6
-      '@jridgewell/gen-mapping': 0.3.2
-      '@jridgewell/trace-mapping': 0.3.17
-      jsesc: 2.5.2
 
-  /@babel/helper-annotate-as-pure@7.22.5:
-    resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==}
+  '@babel/helper-annotate-as-pure@7.25.7':
+    resolution: {integrity: sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==}
     engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': 7.23.6
 
-  /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15:
-    resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==}
+  '@babel/helper-builder-binary-assignment-operator-visitor@7.25.7':
+    resolution: {integrity: sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg==}
     engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': 7.23.6
-    dev: true
 
-  /@babel/helper-compilation-targets@7.23.6:
-    resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==}
+  '@babel/helper-compilation-targets@7.25.7':
+    resolution: {integrity: sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==}
     engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/compat-data': 7.23.5
-      '@babel/helper-validator-option': 7.23.5
-      browserslist: 4.22.2
-      lru-cache: 5.1.1
-      semver: 6.3.1
 
-  /@babel/helper-create-class-features-plugin@7.23.7(@babel/core@7.23.7):
-    resolution: {integrity: sha512-xCoqR/8+BoNnXOY7RVSgv6X+o7pmT5q1d+gGcRlXYkI+9B31glE4jeejhKVpA04O1AtzOt7OSQ6VYKP5FcRl9g==}
+  '@babel/helper-create-class-features-plugin@7.25.7':
+    resolution: {integrity: sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-annotate-as-pure': 7.22.5
-      '@babel/helper-environment-visitor': 7.22.20
-      '@babel/helper-function-name': 7.23.0
-      '@babel/helper-member-expression-to-functions': 7.23.0
-      '@babel/helper-optimise-call-expression': 7.22.5
-      '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7)
-      '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
-      '@babel/helper-split-export-declaration': 7.22.6
-      semver: 6.3.1
-    dev: true
 
-  /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.7):
-    resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==}
+  '@babel/helper-create-regexp-features-plugin@7.25.7':
+    resolution: {integrity: sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-annotate-as-pure': 7.22.5
-      regexpu-core: 5.3.2
-      semver: 6.3.1
-    dev: true
 
-  /@babel/helper-define-polyfill-provider@0.4.4(@babel/core@7.23.7):
-    resolution: {integrity: sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==}
+  '@babel/helper-define-polyfill-provider@0.6.2':
+    resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==}
     peerDependencies:
       '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-compilation-targets': 7.23.6
-      '@babel/helper-plugin-utils': 7.22.5
-      debug: 4.3.4
-      lodash.debounce: 4.0.8
-      resolve: 1.22.8
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
 
-  /@babel/helper-environment-visitor@7.22.20:
-    resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==}
+  '@babel/helper-member-expression-to-functions@7.25.7':
+    resolution: {integrity: sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==}
     engines: {node: '>=6.9.0'}
 
-  /@babel/helper-function-name@7.23.0:
-    resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==}
+  '@babel/helper-module-imports@7.25.7':
+    resolution: {integrity: sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==}
     engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/template': 7.22.15
-      '@babel/types': 7.23.6
 
-  /@babel/helper-hoist-variables@7.22.5:
-    resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': 7.23.6
-
-  /@babel/helper-member-expression-to-functions@7.23.0:
-    resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': 7.23.6
-    dev: true
-
-  /@babel/helper-module-imports@7.22.15:
-    resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': 7.23.6
-
-  /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==}
+  '@babel/helper-module-transforms@7.25.7':
+    resolution: {integrity: sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-environment-visitor': 7.22.20
-      '@babel/helper-module-imports': 7.22.15
-      '@babel/helper-simple-access': 7.22.5
-      '@babel/helper-split-export-declaration': 7.22.6
-      '@babel/helper-validator-identifier': 7.22.20
 
-  /@babel/helper-optimise-call-expression@7.22.5:
-    resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': 7.23.6
-    dev: true
-
-  /@babel/helper-plugin-utils@7.22.5:
-    resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==}
+  '@babel/helper-optimise-call-expression@7.25.7':
+    resolution: {integrity: sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==}
     engines: {node: '>=6.9.0'}
 
-  /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.7):
-    resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==}
+  '@babel/helper-plugin-utils@7.25.7':
+    resolution: {integrity: sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==}
+    engines: {node: '>=6.9.0'}
+
+  '@babel/helper-remap-async-to-generator@7.25.7':
+    resolution: {integrity: sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-annotate-as-pure': 7.22.5
-      '@babel/helper-environment-visitor': 7.22.20
-      '@babel/helper-wrap-function': 7.22.20
-    dev: true
 
-  /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.7):
-    resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==}
+  '@babel/helper-replace-supers@7.25.7':
+    resolution: {integrity: sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-environment-visitor': 7.22.20
-      '@babel/helper-member-expression-to-functions': 7.23.0
-      '@babel/helper-optimise-call-expression': 7.22.5
-    dev: true
 
-  /@babel/helper-simple-access@7.22.5:
-    resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==}
+  '@babel/helper-simple-access@7.25.7':
+    resolution: {integrity: sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==}
     engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': 7.23.6
 
-  /@babel/helper-skip-transparent-expression-wrappers@7.22.5:
-    resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==}
+  '@babel/helper-skip-transparent-expression-wrappers@7.25.7':
+    resolution: {integrity: sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==}
     engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': 7.23.6
-    dev: true
 
-  /@babel/helper-split-export-declaration@7.22.6:
-    resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==}
-    engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/types': 7.23.6
-
-  /@babel/helper-string-parser@7.19.4:
+  '@babel/helper-string-parser@7.19.4':
     resolution: {integrity: sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==}
     engines: {node: '>=6.9.0'}
-    dev: true
 
-  /@babel/helper-string-parser@7.21.5:
+  '@babel/helper-string-parser@7.21.5':
     resolution: {integrity: sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==}
     engines: {node: '>=6.9.0'}
-    dev: true
 
-  /@babel/helper-string-parser@7.23.4:
-    resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==}
+  '@babel/helper-string-parser@7.25.7':
+    resolution: {integrity: sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==}
     engines: {node: '>=6.9.0'}
 
-  /@babel/helper-validator-identifier@7.19.1:
+  '@babel/helper-validator-identifier@7.19.1':
     resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==}
     engines: {node: '>=6.9.0'}
-    dev: true
 
-  /@babel/helper-validator-identifier@7.22.20:
-    resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==}
+  '@babel/helper-validator-identifier@7.25.7':
+    resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==}
     engines: {node: '>=6.9.0'}
 
-  /@babel/helper-validator-option@7.23.5:
-    resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==}
+  '@babel/helper-validator-option@7.25.7':
+    resolution: {integrity: sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==}
     engines: {node: '>=6.9.0'}
 
-  /@babel/helper-wrap-function@7.22.20:
-    resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==}
+  '@babel/helper-wrap-function@7.25.7':
+    resolution: {integrity: sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==}
     engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/helper-function-name': 7.23.0
-      '@babel/template': 7.22.15
-      '@babel/types': 7.23.6
-    dev: true
 
-  /@babel/helpers@7.23.7:
-    resolution: {integrity: sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ==}
+  '@babel/helpers@7.25.7':
+    resolution: {integrity: sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==}
     engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/template': 7.22.15
-      '@babel/traverse': 7.23.7
-      '@babel/types': 7.23.6
-    transitivePeerDependencies:
-      - supports-color
 
-  /@babel/highlight@7.23.4:
+  '@babel/highlight@7.23.4':
     resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==}
     engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/helper-validator-identifier': 7.22.20
-      chalk: 2.4.2
-      js-tokens: 4.0.0
 
-  /@babel/parser@7.18.4:
+  '@babel/highlight@7.25.7':
+    resolution: {integrity: sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==}
+    engines: {node: '>=6.9.0'}
+
+  '@babel/parser@7.18.4':
     resolution: {integrity: sha512-FDge0dFazETFcxGw/EXzOkN8uJp0PC7Qbm+Pe9T+av2zlBpOgunFHkQPPn+eRuClU73JF+98D531UgayY89tow==}
     engines: {node: '>=6.0.0'}
     hasBin: true
-    dependencies:
-      '@babel/types': 7.21.5
-    dev: true
 
-  /@babel/parser@7.21.4:
+  '@babel/parser@7.21.4':
     resolution: {integrity: sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==}
     engines: {node: '>=6.0.0'}
     hasBin: true
-    dependencies:
-      '@babel/types': 7.20.7
-    dev: true
 
-  /@babel/parser@7.23.6:
-    resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==}
+  '@babel/parser@7.25.8':
+    resolution: {integrity: sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==}
     engines: {node: '>=6.0.0'}
     hasBin: true
-    dependencies:
-      '@babel/types': 7.23.6
 
-  /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==}
+  '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.7':
+    resolution: {integrity: sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
 
-  /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==}
+  '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.7':
+    resolution: {integrity: sha512-GDDWeVLNxRIkQTnJn2pDOM1pkCgYdSqPeT1a9vh9yIqu2uzzgw1zcqEb+IJOhy+dTBMlNdThrDIksr2o09qrrQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+
+  '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.7':
+    resolution: {integrity: sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+
+  '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.7':
+    resolution: {integrity: sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.13.0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
-      '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.7)
-    dev: true
 
-  /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.7(@babel/core@7.23.7):
-    resolution: {integrity: sha512-LlRT7HgaifEpQA1ZgLVOIJZZFVPWN5iReq/7/JixwBtwcoeVGDBD53ZV28rrsLYOZs1Y/EHhA8N/Z6aazHR8cw==}
+  '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.7':
+    resolution: {integrity: sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-environment-visitor': 7.22.20
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
 
-  /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.7):
+  '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2':
     resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-    dev: true
 
-  /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.7):
-    resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.7):
-    resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.7):
-    resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
+  '@babel/plugin-syntax-import-assertions@7.25.7':
+    resolution: {integrity: sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
 
-  /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==}
+  '@babel/plugin-syntax-import-attributes@7.25.7':
+    resolution: {integrity: sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
 
-  /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==}
+  '@babel/plugin-syntax-jsx@7.25.7':
+    resolution: {integrity: sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
 
-  /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.7):
-    resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.23.7):
-    resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-
-  /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.7):
-    resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.7):
-    resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.7):
-    resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.7):
-    resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.7):
+  '@babel/plugin-syntax-unicode-sets-regex@7.18.6':
     resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7)
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
 
-  /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==}
+  '@babel/plugin-transform-arrow-functions@7.25.7':
+    resolution: {integrity: sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
 
-  /@babel/plugin-transform-async-generator-functions@7.23.7(@babel/core@7.23.7):
-    resolution: {integrity: sha512-PdxEpL71bJp1byMG0va5gwQcXHxuEYC/BgI/e88mGTtohbZN28O5Yit0Plkkm/dBzCF/BxmbNcses1RH1T+urA==}
+  '@babel/plugin-transform-async-generator-functions@7.25.8':
+    resolution: {integrity: sha512-9ypqkozyzpG+HxlH4o4gdctalFGIjjdufzo7I2XPda0iBnZ6a+FO0rIEQcdSPXp02CkvGsII1exJhmROPQd5oA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-environment-visitor': 7.22.20
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.7)
-      '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.7)
-    dev: true
 
-  /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==}
+  '@babel/plugin-transform-async-to-generator@7.25.7':
+    resolution: {integrity: sha512-ZUCjAavsh5CESCmi/xCpX1qcCaAglzs/7tmuvoFnJgA1dM7gQplsguljoTg+Ru8WENpX89cQyAtWoaE0I3X3Pg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-module-imports': 7.22.15
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.7)
-    dev: true
 
-  /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==}
+  '@babel/plugin-transform-block-scoped-functions@7.25.7':
+    resolution: {integrity: sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
 
-  /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.7):
-    resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==}
+  '@babel/plugin-transform-block-scoping@7.25.7':
+    resolution: {integrity: sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
 
-  /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==}
+  '@babel/plugin-transform-class-properties@7.25.7':
+    resolution: {integrity: sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7)
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
 
-  /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.7):
-    resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==}
+  '@babel/plugin-transform-class-static-block@7.25.8':
+    resolution: {integrity: sha512-e82gl3TCorath6YLf9xUwFehVvjvfqFhdOo4+0iVIVju+6XOi5XHkqB3P2AXnSwoeTX0HBoXq5gJFtvotJzFnQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.12.0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7)
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.7)
-    dev: true
 
-  /@babel/plugin-transform-classes@7.23.5(@babel/core@7.23.7):
-    resolution: {integrity: sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==}
+  '@babel/plugin-transform-classes@7.25.7':
+    resolution: {integrity: sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-annotate-as-pure': 7.22.5
-      '@babel/helper-compilation-targets': 7.23.6
-      '@babel/helper-environment-visitor': 7.22.20
-      '@babel/helper-function-name': 7.23.0
-      '@babel/helper-optimise-call-expression': 7.22.5
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7)
-      '@babel/helper-split-export-declaration': 7.22.6
-      globals: 11.12.0
-    dev: true
 
-  /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==}
+  '@babel/plugin-transform-computed-properties@7.25.7':
+    resolution: {integrity: sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/template': 7.22.15
-    dev: true
 
-  /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==}
+  '@babel/plugin-transform-destructuring@7.25.7':
+    resolution: {integrity: sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
 
-  /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==}
+  '@babel/plugin-transform-dotall-regex@7.25.7':
+    resolution: {integrity: sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7)
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
 
-  /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==}
+  '@babel/plugin-transform-duplicate-keys@7.25.7':
+    resolution: {integrity: sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
 
-  /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.7):
-    resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.7)
-    dev: true
-
-  /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.7):
-    resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.7)
-    dev: true
-
-  /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.23.7):
-    resolution: {integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-compilation-targets': 7.23.6
-      '@babel/helper-function-name': 7.23.0
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.7):
-    resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.7)
-    dev: true
-
-  /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.7):
-    resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.7)
-    dev: true
-
-  /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7)
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7)
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/helper-simple-access': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-hoist-variables': 7.22.5
-      '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7)
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/helper-validator-identifier': 7.22.20
-    dev: true
-
-  /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.7)
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.7):
-    resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==}
+  '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.7':
+    resolution: {integrity: sha512-HvS6JF66xSS5rNKXLqkk7L9c/jZ/cdIVIcoPVrnl8IsVpLggTjXs8OWekbLHs/VtYDDh5WXnQyeE3PPUGm22MA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7)
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
 
-  /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==}
+  '@babel/plugin-transform-dynamic-import@7.25.8':
+    resolution: {integrity: sha512-gznWY+mr4ZQL/EWPcbBQUP3BXS5FwZp8RUOw06BaRn8tQLzN4XLIxXejpHN9Qo8x8jjBmAAKp6FoS51AgkSA/A==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
 
-  /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.7):
-    resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==}
+  '@babel/plugin-transform-exponentiation-operator@7.25.7':
+    resolution: {integrity: sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.7)
-    dev: true
 
-  /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.7):
-    resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==}
+  '@babel/plugin-transform-export-namespace-from@7.25.8':
+    resolution: {integrity: sha512-sPtYrduWINTQTW7FtOy99VCTWp4H23UX7vYcut7S4CIMEXU+54zKX9uCoGkLsWXteyaMXzVHgzWbLfQ1w4GZgw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.7)
-    dev: true
 
-  /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.7):
-    resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==}
+  '@babel/plugin-transform-for-of@7.25.7':
+    resolution: {integrity: sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/compat-data': 7.23.5
-      '@babel/core': 7.23.7
-      '@babel/helper-compilation-targets': 7.23.6
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.7)
-    dev: true
 
-  /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==}
+  '@babel/plugin-transform-function-name@7.25.7':
+    resolution: {integrity: sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.7)
-    dev: true
 
-  /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.7):
-    resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==}
+  '@babel/plugin-transform-json-strings@7.25.8':
+    resolution: {integrity: sha512-4OMNv7eHTmJ2YXs3tvxAfa/I43di+VcF+M4Wt66c88EAED1RoGaf1D64cL5FkRpNL+Vx9Hds84lksWvd/wMIdA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.7)
-    dev: true
 
-  /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.7):
-    resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==}
+  '@babel/plugin-transform-literals@7.25.7':
+    resolution: {integrity: sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
-      '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.7)
-    dev: true
 
-  /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==}
+  '@babel/plugin-transform-logical-assignment-operators@7.25.8':
+    resolution: {integrity: sha512-f5W0AhSbbI+yY6VakT04jmxdxz+WsID0neG7+kQZbCOjuyJNdL5Nn4WIBm4hRpKnUcO9lP0eipUhFN12JpoH8g==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
 
-  /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==}
+  '@babel/plugin-transform-member-expression-literals@7.25.7':
+    resolution: {integrity: sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7)
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
 
-  /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.7):
-    resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==}
+  '@babel/plugin-transform-modules-amd@7.25.7':
+    resolution: {integrity: sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-annotate-as-pure': 7.22.5
-      '@babel/helper-create-class-features-plugin': 7.23.7(@babel/core@7.23.7)
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.7)
-    dev: true
 
-  /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==}
+  '@babel/plugin-transform-modules-commonjs@7.25.7':
+    resolution: {integrity: sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
 
-  /@babel/plugin-transform-react-jsx-self@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==}
+  '@babel/plugin-transform-modules-systemjs@7.25.7':
+    resolution: {integrity: sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: false
 
-  /@babel/plugin-transform-react-jsx-source@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==}
+  '@babel/plugin-transform-modules-umd@7.25.7':
+    resolution: {integrity: sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: false
 
-  /@babel/plugin-transform-react-jsx@7.22.15(@babel/core@7.23.7):
-    resolution: {integrity: sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-annotate-as-pure': 7.22.5
-      '@babel/helper-module-imports': 7.22.15
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.7)
-      '@babel/types': 7.23.6
-
-  /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-      regenerator-transform: 0.15.2
-    dev: true
-
-  /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7)
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==}
-    engines: {node: '>=6.9.0'}
-    peerDependencies:
-      '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7)
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
-
-  /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.7):
-    resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==}
+  '@babel/plugin-transform-named-capturing-groups-regex@7.25.7':
+    resolution: {integrity: sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.7)
-      '@babel/helper-plugin-utils': 7.22.5
-    dev: true
 
-  /@babel/preset-env@7.23.7(@babel/core@7.23.7):
-    resolution: {integrity: sha512-SY27X/GtTz/L4UryMNJ6p4fH4nsgWbz84y9FE0bQeWJP6O5BhgVCt53CotQKHCOeXJel8VyhlhujhlltKms/CA==}
+  '@babel/plugin-transform-new-target@7.25.7':
+    resolution: {integrity: sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
-    dependencies:
-      '@babel/compat-data': 7.23.5
-      '@babel/core': 7.23.7
-      '@babel/helper-compilation-targets': 7.23.6
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/helper-validator-option': 7.23.5
-      '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.7(@babel/core@7.23.7)
-      '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.7)
-      '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.7)
-      '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.7)
-      '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.7)
-      '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.7)
-      '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.7)
-      '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.7)
-      '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.7)
-      '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.7)
-      '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.7)
-      '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.7)
-      '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.7)
-      '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.7)
-      '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.7)
-      '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.7)
-      '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.7)
-      '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.7)
-      '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-async-generator-functions': 7.23.7(@babel/core@7.23.7)
-      '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.7)
-      '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.7)
-      '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.23.7)
-      '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.7)
-      '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.7)
-      '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.23.7)
-      '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.7)
-      '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.7)
-      '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.7)
-      '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.7)
-      '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.7)
-      '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.7)
-      '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.7)
-      '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.7)
-      '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.7)
-      '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.7)
-      '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.7)
-      babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.23.7)
-      babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.23.7)
-      babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.23.7)
-      core-js-compat: 3.35.0
-      semver: 6.3.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
 
-  /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.7):
+  '@babel/plugin-transform-nullish-coalescing-operator@7.25.8':
+    resolution: {integrity: sha512-Z7WJJWdQc8yCWgAmjI3hyC+5PXIubH9yRKzkl9ZEG647O9szl9zvmKLzpbItlijBnVhTUf1cpyWBsZ3+2wjWPQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+
+  '@babel/plugin-transform-numeric-separator@7.25.8':
+    resolution: {integrity: sha512-rm9a5iEFPS4iMIy+/A/PiS0QN0UyjPIeVvbU5EMZFKJZHt8vQnasbpo3T3EFcxzCeYO0BHfc4RqooCZc51J86Q==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+
+  '@babel/plugin-transform-object-rest-spread@7.25.8':
+    resolution: {integrity: sha512-LkUu0O2hnUKHKE7/zYOIjByMa4VRaV2CD/cdGz0AxU9we+VA3kDDggKEzI0Oz1IroG+6gUP6UmWEHBMWZU316g==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+
+  '@babel/plugin-transform-object-super@7.25.7':
+    resolution: {integrity: sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+
+  '@babel/plugin-transform-optional-catch-binding@7.25.8':
+    resolution: {integrity: sha512-EbQYweoMAHOn7iJ9GgZo14ghhb9tTjgOc88xFgYngifx7Z9u580cENCV159M4xDh3q/irbhSjZVpuhpC2gKBbg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+
+  '@babel/plugin-transform-optional-chaining@7.25.8':
+    resolution: {integrity: sha512-q05Bk7gXOxpTHoQ8RSzGSh/LHVB9JEIkKnk3myAWwZHnYiTGYtbdrYkIsS8Xyh4ltKf7GNUSgzs/6P2bJtBAQg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+
+  '@babel/plugin-transform-parameters@7.25.7':
+    resolution: {integrity: sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+
+  '@babel/plugin-transform-private-methods@7.25.7':
+    resolution: {integrity: sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+
+  '@babel/plugin-transform-private-property-in-object@7.25.8':
+    resolution: {integrity: sha512-8Uh966svuB4V8RHHg0QJOB32QK287NBksJOByoKmHMp1TAobNniNalIkI2i5IPj5+S9NYCG4VIjbEuiSN8r+ow==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+
+  '@babel/plugin-transform-property-literals@7.25.7':
+    resolution: {integrity: sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+
+  '@babel/plugin-transform-react-jsx-self@7.25.7':
+    resolution: {integrity: sha512-JD9MUnLbPL0WdVK8AWC7F7tTG2OS6u/AKKnsK+NdRhUiVdnzyR1S3kKQCaRLOiaULvUiqK6Z4JQE635VgtCFeg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+
+  '@babel/plugin-transform-react-jsx-source@7.25.7':
+    resolution: {integrity: sha512-S/JXG/KrbIY06iyJPKfxr0qRxnhNOdkNXYBl/rmwgDd72cQLH9tEGkDm/yJPGvcSIUoikzfjMios9i+xT/uv9w==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+
+  '@babel/plugin-transform-react-jsx@7.25.7':
+    resolution: {integrity: sha512-vILAg5nwGlR9EXE8JIOX4NHXd49lrYbN8hnjffDtoULwpL9hUx/N55nqh2qd0q6FyNDfjl9V79ecKGvFbcSA0Q==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+
+  '@babel/plugin-transform-regenerator@7.25.7':
+    resolution: {integrity: sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+
+  '@babel/plugin-transform-reserved-words@7.25.7':
+    resolution: {integrity: sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+
+  '@babel/plugin-transform-shorthand-properties@7.25.7':
+    resolution: {integrity: sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+
+  '@babel/plugin-transform-spread@7.25.7':
+    resolution: {integrity: sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+
+  '@babel/plugin-transform-sticky-regex@7.25.7':
+    resolution: {integrity: sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+
+  '@babel/plugin-transform-template-literals@7.25.7':
+    resolution: {integrity: sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+
+  '@babel/plugin-transform-typeof-symbol@7.25.7':
+    resolution: {integrity: sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+
+  '@babel/plugin-transform-unicode-escapes@7.25.7':
+    resolution: {integrity: sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+
+  '@babel/plugin-transform-unicode-property-regex@7.25.7':
+    resolution: {integrity: sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+
+  '@babel/plugin-transform-unicode-regex@7.25.7':
+    resolution: {integrity: sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+
+  '@babel/plugin-transform-unicode-sets-regex@7.25.7':
+    resolution: {integrity: sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0
+
+  '@babel/preset-env@7.25.8':
+    resolution: {integrity: sha512-58T2yulDHMN8YMUxiLq5YmWUnlDCyY1FsHM+v12VMx+1/FlrUj5tY50iDCpofFQEM8fMYOaY9YRvym2jcjn1Dg==}
+    engines: {node: '>=6.9.0'}
+    peerDependencies:
+      '@babel/core': ^7.0.0-0
+
+  '@babel/preset-modules@0.1.6-no-external-plugins':
     resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==}
     peerDependencies:
       '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-plugin-utils': 7.22.5
-      '@babel/types': 7.23.6
-      esutils: 2.0.3
-    dev: true
 
-  /@babel/regjsgen@0.8.0:
-    resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==}
-    dev: true
-
-  /@babel/runtime@7.20.13:
+  '@babel/runtime@7.20.13':
     resolution: {integrity: sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==}
     engines: {node: '>=6.9.0'}
-    dependencies:
-      regenerator-runtime: 0.13.11
-    dev: false
 
-  /@babel/runtime@7.24.1:
-    resolution: {integrity: sha512-+BIznRzyqBf+2wCTxcKE3wDjfGeCoVE61KSHGpkzqrLi8qxqFwBeUFyId2cxkTmm55fzDGnm0+yCxaxygrLUnQ==}
+  '@babel/runtime@7.25.7':
+    resolution: {integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==}
     engines: {node: '>=6.9.0'}
-    dependencies:
-      regenerator-runtime: 0.14.1
 
-  /@babel/template@7.22.15:
-    resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==}
+  '@babel/template@7.25.7':
+    resolution: {integrity: sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==}
     engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/code-frame': 7.23.5
-      '@babel/parser': 7.23.6
-      '@babel/types': 7.23.6
 
-  /@babel/traverse@7.23.7:
-    resolution: {integrity: sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==}
+  '@babel/traverse@7.25.7':
+    resolution: {integrity: sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==}
     engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/code-frame': 7.23.5
-      '@babel/generator': 7.23.6
-      '@babel/helper-environment-visitor': 7.22.20
-      '@babel/helper-function-name': 7.23.0
-      '@babel/helper-hoist-variables': 7.22.5
-      '@babel/helper-split-export-declaration': 7.22.6
-      '@babel/parser': 7.23.6
-      '@babel/types': 7.23.6
-      debug: 4.3.4
-      globals: 11.12.0
-    transitivePeerDependencies:
-      - supports-color
 
-  /@babel/types@7.19.0:
+  '@babel/types@7.19.0':
     resolution: {integrity: sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==}
     engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/helper-string-parser': 7.21.5
-      '@babel/helper-validator-identifier': 7.19.1
-      to-fast-properties: 2.0.0
-    dev: true
 
-  /@babel/types@7.20.7:
+  '@babel/types@7.20.7':
     resolution: {integrity: sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==}
     engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/helper-string-parser': 7.19.4
-      '@babel/helper-validator-identifier': 7.19.1
-      to-fast-properties: 2.0.0
-    dev: true
 
-  /@babel/types@7.21.5:
+  '@babel/types@7.21.5':
     resolution: {integrity: sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==}
     engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/helper-string-parser': 7.21.5
-      '@babel/helper-validator-identifier': 7.19.1
-      to-fast-properties: 2.0.0
-    dev: true
 
-  /@babel/types@7.23.6:
-    resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==}
+  '@babel/types@7.25.8':
+    resolution: {integrity: sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==}
     engines: {node: '>=6.9.0'}
-    dependencies:
-      '@babel/helper-string-parser': 7.23.4
-      '@babel/helper-validator-identifier': 7.22.20
-      to-fast-properties: 2.0.0
 
-  /@codemirror/autocomplete@6.11.1(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)(@lezer/common@1.0.2):
-    resolution: {integrity: sha512-L5UInv8Ffd6BPw0P3EF7JLYAMeEbclY7+6Q11REt8vhih8RuLreKtPy/xk8wPxs4EQgYqzI7cdgpiYwWlbS/ow==}
+  '@codemirror/autocomplete@6.18.1':
+    resolution: {integrity: sha512-iWHdj/B1ethnHRTwZj+C1obmmuCzquH29EbcKr0qIjA9NfDeBDJ7vs+WOHsFeLeflE4o+dHfYndJloMKHUkWUA==}
     peerDependencies:
       '@codemirror/language': ^6.0.0
       '@codemirror/state': ^6.0.0
       '@codemirror/view': ^6.0.0
       '@lezer/common': ^1.0.0
-    dependencies:
-      '@codemirror/language': 6.10.0
-      '@codemirror/state': 6.4.0
-      '@codemirror/view': 6.23.0
-      '@lezer/common': 1.0.2
-    dev: false
 
-  /@codemirror/autocomplete@6.11.1(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)(@lezer/common@1.2.0):
-    resolution: {integrity: sha512-L5UInv8Ffd6BPw0P3EF7JLYAMeEbclY7+6Q11REt8vhih8RuLreKtPy/xk8wPxs4EQgYqzI7cdgpiYwWlbS/ow==}
-    peerDependencies:
-      '@codemirror/language': ^6.0.0
-      '@codemirror/state': ^6.0.0
-      '@codemirror/view': ^6.0.0
-      '@lezer/common': ^1.0.0
-    dependencies:
-      '@codemirror/language': 6.10.0
-      '@codemirror/state': 6.4.0
-      '@codemirror/view': 6.23.0
-      '@lezer/common': 1.2.0
-    dev: false
+  '@codemirror/commands@6.7.0':
+    resolution: {integrity: sha512-+cduIZ2KbesDhbykV02K25A5xIVrquSPz4UxxYBemRlAT2aW8dhwUgLDwej7q/RJUHKk4nALYcR1puecDvbdqw==}
 
-  /@codemirror/commands@6.3.3:
-    resolution: {integrity: sha512-dO4hcF0fGT9tu1Pj1D2PvGvxjeGkbC6RGcZw6Qs74TH+Ed1gw98jmUgd2axWvIZEqTeTuFrg1lEB1KV6cK9h1A==}
-    dependencies:
-      '@codemirror/language': 6.10.0
-      '@codemirror/state': 6.4.0
-      '@codemirror/view': 6.23.0
-      '@lezer/common': 1.2.0
-    dev: false
+  '@codemirror/lang-javascript@6.2.2':
+    resolution: {integrity: sha512-VGQfY+FCc285AhWuwjYxQyUQcYurWlxdKYT4bqwr3Twnd5wP5WSeu52t4tvvuWmljT4EmgEgZCqSieokhtY8hg==}
 
-  /@codemirror/lang-javascript@6.2.1:
-    resolution: {integrity: sha512-jlFOXTejVyiQCW3EQwvKH0m99bUYIw40oPmFjSX2VS78yzfe0HELZ+NEo9Yfo1MkGRpGlj3Gnu4rdxV1EnAs5A==}
-    dependencies:
-      '@codemirror/autocomplete': 6.11.1(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)(@lezer/common@1.0.2)
-      '@codemirror/language': 6.10.0
-      '@codemirror/lint': 6.1.0
-      '@codemirror/state': 6.4.0
-      '@codemirror/view': 6.23.0
-      '@lezer/common': 1.0.2
-      '@lezer/javascript': 1.4.1
-    dev: false
+  '@codemirror/language@6.10.3':
+    resolution: {integrity: sha512-kDqEU5sCP55Oabl6E7m5N+vZRoc0iWqgDVhEKifcHzPzjqCegcO4amfrYVL9PmPZpl4G0yjkpTpUO/Ui8CzO8A==}
 
-  /@codemirror/language@6.10.0:
-    resolution: {integrity: sha512-2vaNn9aPGCRFKWcHPFksctzJ8yS5p7YoaT+jHpc0UGKzNuAIx4qy6R5wiqbP+heEEdyaABA582mNqSHzSoYdmg==}
-    dependencies:
-      '@codemirror/state': 6.4.0
-      '@codemirror/view': 6.23.0
-      '@lezer/common': 1.2.0
-      '@lezer/highlight': 1.2.0
-      '@lezer/lr': 1.3.1
-      style-mod: 4.0.0
-    dev: false
-
-  /@codemirror/lint@6.1.0:
+  '@codemirror/lint@6.1.0':
     resolution: {integrity: sha512-mdvDQrjRmYPvQ3WrzF6Ewaao+NWERYtpthJvoQ3tK3t/44Ynhk8ZGjTSL9jMEv8CgSMogmt75X8ceOZRDSXHtQ==}
-    dependencies:
-      '@codemirror/state': 6.4.0
-      '@codemirror/view': 6.23.0
-      crelt: 1.0.5
-    dev: false
 
-  /@codemirror/lint@6.4.2:
+  '@codemirror/lint@6.4.2':
     resolution: {integrity: sha512-wzRkluWb1ptPKdzlsrbwwjYCPLgzU6N88YBAmlZi8WFyuiEduSd05MnJYNogzyc8rPK7pj6m95ptUApc8sHKVA==}
-    dependencies:
-      '@codemirror/state': 6.4.0
-      '@codemirror/view': 6.23.0
-      crelt: 1.0.6
-    dev: false
 
-  /@codemirror/search@6.5.5:
-    resolution: {integrity: sha512-PIEN3Ke1buPod2EHbJsoQwlbpkz30qGZKcnmH1eihq9+bPQx8gelauUwLYaY4vBOuBAuEhmpDLii4rj/uO0yMA==}
-    dependencies:
-      '@codemirror/state': 6.4.0
-      '@codemirror/view': 6.23.0
-      crelt: 1.0.5
-    dev: false
+  '@codemirror/search@6.5.6':
+    resolution: {integrity: sha512-rpMgcsh7o0GuCDUXKPvww+muLA1pDJaFrpq/CCHtpQJYz8xopu4D1hPcKRoDD0YlF8gZaqTNIRa4VRBWyhyy7Q==}
 
-  /@codemirror/state@6.4.0:
-    resolution: {integrity: sha512-hm8XshYj5Fo30Bb922QX9hXB/bxOAVH+qaqHBzw5TKa72vOeslyGwd4X8M0c1dJ9JqxlaMceOQ8RsL9tC7gU0A==}
-    dev: false
+  '@codemirror/state@6.4.1':
+    resolution: {integrity: sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==}
 
-  /@codemirror/view@6.23.0:
-    resolution: {integrity: sha512-/51px9N4uW8NpuWkyUX+iam5+PM6io2fm+QmRnzwqBy5v/pwGg9T0kILFtYeum8hjuvENtgsGNKluOfqIICmeQ==}
-    dependencies:
-      '@codemirror/state': 6.4.0
-      style-mod: 4.1.0
-      w3c-keyname: 2.2.6
-    dev: false
+  '@codemirror/view@6.34.1':
+    resolution: {integrity: sha512-t1zK/l9UiRqwUNPm+pdIT0qzJlzuVckbTEMVNFhfWkGiBQClstzg+78vedCvLSX0xJEZ6lwZbPpnljL7L6iwMQ==}
 
-  /@csound/browser@6.18.7(eslint@8.56.0):
+  '@csound/browser@6.18.7':
     resolution: {integrity: sha512-pHC83n1fzV9xp7hkFNBTWYsqkBnOS3qNAA9AJNnu3ZCG35a4rMZ5ydOuFi3qqfkLwRTd+frazabxM/lu0+u0qw==}
-    dependencies:
-      comlink: 4.3.1
-      eslint-plugin-n: 15.6.1(eslint@8.56.0)
-      eventemitter3: 4.0.7
-      google-closure-compiler: 20221102.0.1
-      google-closure-library: 20221102.0.0
-      path-browserify: 1.0.1
-      rambda: 7.4.0
-      rimraf: 3.0.2
-      standardized-audio-context: 25.3.37
-      text-encoding-shim: 1.0.5
-      unmute-ios-audio: 3.3.0
-      web-midi-api: 2.2.2
-    transitivePeerDependencies:
-      - eslint
-    dev: false
 
-  /@dependents/detective-less@4.1.0:
+  '@dependents/detective-less@4.1.0':
     resolution: {integrity: sha512-KrkT6qO5NxqNfy68sBl6CTSoJ4SNDIS5iQArkibhlbGU4LaDukZ3q2HIkh8aUKDio6o4itU4xDR7t82Y2eP1Bg==}
     engines: {node: '>=14'}
-    dependencies:
-      gonzales-pe: 4.3.0
-      node-source-walk: 6.0.2
-    dev: true
 
-  /@docsearch/css@3.5.2:
-    resolution: {integrity: sha512-SPiDHaWKQZpwR2siD0KQUwlStvIAnEyK6tAE2h2Wuoq8ue9skzhlyVQ1ddzOxX6khULnAALDiR/isSF3bnuciA==}
-    dev: false
+  '@docsearch/css@3.6.2':
+    resolution: {integrity: sha512-vKNZepO2j7MrYBTZIGXvlUOIR+v9KRf70FApRgovWrj3GTs1EITz/Xb0AOlm1xsQBp16clVZj1SY/qaOJbQtZw==}
 
-  /@docsearch/react@3.5.2(@algolia/client-search@4.22.0)(@types/react@18.2.46)(react-dom@18.2.0)(react@18.2.0)(search-insights@2.13.0):
-    resolution: {integrity: sha512-9Ahcrs5z2jq/DcAvYtvlqEBHImbm4YJI8M9y0x6Tqg598P40HTEkX7hsMcIuThI+hTFxRGZ9hll0Wygm2yEjng==}
+  '@docsearch/react@3.6.2':
+    resolution: {integrity: sha512-rtZce46OOkVflCQH71IdbXSFK+S8iJZlUF56XBW5rIgx/eG5qoomC7Ag3anZson1bBac/JFQn7XOBfved/IMRA==}
     peerDependencies:
       '@types/react': '>= 16.8.0 < 19.0.0'
       react: '>= 16.8.0 < 19.0.0'
@@ -2395,1475 +1487,662 @@ packages:
         optional: true
       search-insights:
         optional: true
-    dependencies:
-      '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.22.0)(search-insights@2.13.0)
-      '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.22.0)
-      '@docsearch/css': 3.5.2
-      '@types/react': 18.2.46
-      algoliasearch: 4.22.0
-      react: 18.2.0
-      react-dom: 18.2.0(react@18.2.0)
-      search-insights: 2.13.0
-    transitivePeerDependencies:
-      - '@algolia/client-search'
-    dev: false
 
-  /@emnapi/runtime@0.44.0:
-    resolution: {integrity: sha512-ZX/etZEZw8DR7zAB1eVQT40lNo0jeqpb6dCgOvctB6FIQ5PoXfMuNY8+ayQfu8tNQbAB8gQWSSJupR8NxeiZXw==}
-    requiresBuild: true
-    dependencies:
-      tslib: 2.6.2
-    optional: true
+  '@emnapi/runtime@1.3.1':
+    resolution: {integrity: sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==}
 
-  /@esbuild/aix-ppc64@0.19.11:
-    resolution: {integrity: sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==}
+  '@esbuild/aix-ppc64@0.21.5':
+    resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==}
     engines: {node: '>=12'}
     cpu: [ppc64]
     os: [aix]
-    requiresBuild: true
-    optional: true
 
-  /@esbuild/aix-ppc64@0.20.2:
-    resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==}
-    engines: {node: '>=12'}
-    cpu: [ppc64]
-    os: [aix]
-    requiresBuild: true
-    optional: true
-
-  /@esbuild/android-arm64@0.19.11:
-    resolution: {integrity: sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==}
+  '@esbuild/android-arm64@0.21.5':
+    resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==}
     engines: {node: '>=12'}
     cpu: [arm64]
     os: [android]
-    requiresBuild: true
-    optional: true
 
-  /@esbuild/android-arm64@0.19.5:
-    resolution: {integrity: sha512-5d1OkoJxnYQfmC+Zd8NBFjkhyCNYwM4n9ODrycTFY6Jk1IGiZ+tjVJDDSwDt77nK+tfpGP4T50iMtVi4dEGzhQ==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [android]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/android-arm64@0.20.2:
-    resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [android]
-    requiresBuild: true
-    optional: true
-
-  /@esbuild/android-arm@0.19.11:
-    resolution: {integrity: sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==}
+  '@esbuild/android-arm@0.21.5':
+    resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==}
     engines: {node: '>=12'}
     cpu: [arm]
     os: [android]
-    requiresBuild: true
-    optional: true
 
-  /@esbuild/android-arm@0.19.5:
-    resolution: {integrity: sha512-bhvbzWFF3CwMs5tbjf3ObfGqbl/17ict2/uwOSfr3wmxDE6VdS2GqY/FuzIPe0q0bdhj65zQsvqfArI9MY6+AA==}
-    engines: {node: '>=12'}
-    cpu: [arm]
-    os: [android]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/android-arm@0.20.2:
-    resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==}
-    engines: {node: '>=12'}
-    cpu: [arm]
-    os: [android]
-    requiresBuild: true
-    optional: true
-
-  /@esbuild/android-x64@0.19.11:
-    resolution: {integrity: sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==}
+  '@esbuild/android-x64@0.21.5':
+    resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==}
     engines: {node: '>=12'}
     cpu: [x64]
     os: [android]
-    requiresBuild: true
-    optional: true
 
-  /@esbuild/android-x64@0.19.5:
-    resolution: {integrity: sha512-9t+28jHGL7uBdkBjL90QFxe7DVA+KGqWlHCF8ChTKyaKO//VLuoBricQCgwhOjA1/qOczsw843Fy4cbs4H3DVA==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [android]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/android-x64@0.20.2:
-    resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [android]
-    requiresBuild: true
-    optional: true
-
-  /@esbuild/darwin-arm64@0.19.11:
-    resolution: {integrity: sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==}
+  '@esbuild/darwin-arm64@0.21.5':
+    resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==}
     engines: {node: '>=12'}
     cpu: [arm64]
     os: [darwin]
-    requiresBuild: true
-    optional: true
 
-  /@esbuild/darwin-arm64@0.19.5:
-    resolution: {integrity: sha512-mvXGcKqqIqyKoxq26qEDPHJuBYUA5KizJncKOAf9eJQez+L9O+KfvNFu6nl7SCZ/gFb2QPaRqqmG0doSWlgkqw==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [darwin]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/darwin-arm64@0.20.2:
-    resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [darwin]
-    requiresBuild: true
-    optional: true
-
-  /@esbuild/darwin-x64@0.19.11:
-    resolution: {integrity: sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==}
+  '@esbuild/darwin-x64@0.21.5':
+    resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==}
     engines: {node: '>=12'}
     cpu: [x64]
     os: [darwin]
-    requiresBuild: true
-    optional: true
 
-  /@esbuild/darwin-x64@0.19.5:
-    resolution: {integrity: sha512-Ly8cn6fGLNet19s0X4unjcniX24I0RqjPv+kurpXabZYSXGM4Pwpmf85WHJN3lAgB8GSth7s5A0r856S+4DyiA==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [darwin]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/darwin-x64@0.20.2:
-    resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [darwin]
-    requiresBuild: true
-    optional: true
-
-  /@esbuild/freebsd-arm64@0.19.11:
-    resolution: {integrity: sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==}
+  '@esbuild/freebsd-arm64@0.21.5':
+    resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==}
     engines: {node: '>=12'}
     cpu: [arm64]
     os: [freebsd]
-    requiresBuild: true
-    optional: true
 
-  /@esbuild/freebsd-arm64@0.19.5:
-    resolution: {integrity: sha512-GGDNnPWTmWE+DMchq1W8Sd0mUkL+APvJg3b11klSGUDvRXh70JqLAO56tubmq1s2cgpVCSKYywEiKBfju8JztQ==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [freebsd]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/freebsd-arm64@0.20.2:
-    resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [freebsd]
-    requiresBuild: true
-    optional: true
-
-  /@esbuild/freebsd-x64@0.19.11:
-    resolution: {integrity: sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==}
+  '@esbuild/freebsd-x64@0.21.5':
+    resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==}
     engines: {node: '>=12'}
     cpu: [x64]
     os: [freebsd]
-    requiresBuild: true
-    optional: true
 
-  /@esbuild/freebsd-x64@0.19.5:
-    resolution: {integrity: sha512-1CCwDHnSSoA0HNwdfoNY0jLfJpd7ygaLAp5EHFos3VWJCRX9DMwWODf96s9TSse39Br7oOTLryRVmBoFwXbuuQ==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [freebsd]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/freebsd-x64@0.20.2:
-    resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [freebsd]
-    requiresBuild: true
-    optional: true
-
-  /@esbuild/linux-arm64@0.19.11:
-    resolution: {integrity: sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==}
+  '@esbuild/linux-arm64@0.21.5':
+    resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==}
     engines: {node: '>=12'}
     cpu: [arm64]
     os: [linux]
-    requiresBuild: true
-    optional: true
 
-  /@esbuild/linux-arm64@0.19.5:
-    resolution: {integrity: sha512-o3vYippBmSrjjQUCEEiTZ2l+4yC0pVJD/Dl57WfPwwlvFkrxoSO7rmBZFii6kQB3Wrn/6GwJUPLU5t52eq2meA==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/linux-arm64@0.20.2:
-    resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [linux]
-    requiresBuild: true
-    optional: true
-
-  /@esbuild/linux-arm@0.19.11:
-    resolution: {integrity: sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==}
+  '@esbuild/linux-arm@0.21.5':
+    resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==}
     engines: {node: '>=12'}
     cpu: [arm]
     os: [linux]
-    requiresBuild: true
-    optional: true
 
-  /@esbuild/linux-arm@0.19.5:
-    resolution: {integrity: sha512-lrWXLY/vJBzCPC51QN0HM71uWgIEpGSjSZZADQhq7DKhPcI6NH1IdzjfHkDQws2oNpJKpR13kv7/pFHBbDQDwQ==}
-    engines: {node: '>=12'}
-    cpu: [arm]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/linux-arm@0.20.2:
-    resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==}
-    engines: {node: '>=12'}
-    cpu: [arm]
-    os: [linux]
-    requiresBuild: true
-    optional: true
-
-  /@esbuild/linux-ia32@0.19.11:
-    resolution: {integrity: sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==}
+  '@esbuild/linux-ia32@0.21.5':
+    resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==}
     engines: {node: '>=12'}
     cpu: [ia32]
     os: [linux]
-    requiresBuild: true
-    optional: true
 
-  /@esbuild/linux-ia32@0.19.5:
-    resolution: {integrity: sha512-MkjHXS03AXAkNp1KKkhSKPOCYztRtK+KXDNkBa6P78F8Bw0ynknCSClO/ztGszILZtyO/lVKpa7MolbBZ6oJtQ==}
-    engines: {node: '>=12'}
-    cpu: [ia32]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/linux-ia32@0.20.2:
-    resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==}
-    engines: {node: '>=12'}
-    cpu: [ia32]
-    os: [linux]
-    requiresBuild: true
-    optional: true
-
-  /@esbuild/linux-loong64@0.19.11:
-    resolution: {integrity: sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==}
+  '@esbuild/linux-loong64@0.21.5':
+    resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==}
     engines: {node: '>=12'}
     cpu: [loong64]
     os: [linux]
-    requiresBuild: true
-    optional: true
 
-  /@esbuild/linux-loong64@0.19.5:
-    resolution: {integrity: sha512-42GwZMm5oYOD/JHqHska3Jg0r+XFb/fdZRX+WjADm3nLWLcIsN27YKtqxzQmGNJgu0AyXg4HtcSK9HuOk3v1Dw==}
-    engines: {node: '>=12'}
-    cpu: [loong64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/linux-loong64@0.20.2:
-    resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==}
-    engines: {node: '>=12'}
-    cpu: [loong64]
-    os: [linux]
-    requiresBuild: true
-    optional: true
-
-  /@esbuild/linux-mips64el@0.19.11:
-    resolution: {integrity: sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==}
+  '@esbuild/linux-mips64el@0.21.5':
+    resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==}
     engines: {node: '>=12'}
     cpu: [mips64el]
     os: [linux]
-    requiresBuild: true
-    optional: true
 
-  /@esbuild/linux-mips64el@0.19.5:
-    resolution: {integrity: sha512-kcjndCSMitUuPJobWCnwQ9lLjiLZUR3QLQmlgaBfMX23UEa7ZOrtufnRds+6WZtIS9HdTXqND4yH8NLoVVIkcg==}
-    engines: {node: '>=12'}
-    cpu: [mips64el]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/linux-mips64el@0.20.2:
-    resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==}
-    engines: {node: '>=12'}
-    cpu: [mips64el]
-    os: [linux]
-    requiresBuild: true
-    optional: true
-
-  /@esbuild/linux-ppc64@0.19.11:
-    resolution: {integrity: sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==}
+  '@esbuild/linux-ppc64@0.21.5':
+    resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==}
     engines: {node: '>=12'}
     cpu: [ppc64]
     os: [linux]
-    requiresBuild: true
-    optional: true
 
-  /@esbuild/linux-ppc64@0.19.5:
-    resolution: {integrity: sha512-yJAxJfHVm0ZbsiljbtFFP1BQKLc8kUF6+17tjQ78QjqjAQDnhULWiTA6u0FCDmYT1oOKS9PzZ2z0aBI+Mcyj7Q==}
-    engines: {node: '>=12'}
-    cpu: [ppc64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/linux-ppc64@0.20.2:
-    resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==}
-    engines: {node: '>=12'}
-    cpu: [ppc64]
-    os: [linux]
-    requiresBuild: true
-    optional: true
-
-  /@esbuild/linux-riscv64@0.19.11:
-    resolution: {integrity: sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==}
+  '@esbuild/linux-riscv64@0.21.5':
+    resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==}
     engines: {node: '>=12'}
     cpu: [riscv64]
     os: [linux]
-    requiresBuild: true
-    optional: true
 
-  /@esbuild/linux-riscv64@0.19.5:
-    resolution: {integrity: sha512-5u8cIR/t3gaD6ad3wNt1MNRstAZO+aNyBxu2We8X31bA8XUNyamTVQwLDA1SLoPCUehNCymhBhK3Qim1433Zag==}
-    engines: {node: '>=12'}
-    cpu: [riscv64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/linux-riscv64@0.20.2:
-    resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==}
-    engines: {node: '>=12'}
-    cpu: [riscv64]
-    os: [linux]
-    requiresBuild: true
-    optional: true
-
-  /@esbuild/linux-s390x@0.19.11:
-    resolution: {integrity: sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==}
+  '@esbuild/linux-s390x@0.21.5':
+    resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==}
     engines: {node: '>=12'}
     cpu: [s390x]
     os: [linux]
-    requiresBuild: true
-    optional: true
 
-  /@esbuild/linux-s390x@0.19.5:
-    resolution: {integrity: sha512-Z6JrMyEw/EmZBD/OFEFpb+gao9xJ59ATsoTNlj39jVBbXqoZm4Xntu6wVmGPB/OATi1uk/DB+yeDPv2E8PqZGw==}
-    engines: {node: '>=12'}
-    cpu: [s390x]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/linux-s390x@0.20.2:
-    resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==}
-    engines: {node: '>=12'}
-    cpu: [s390x]
-    os: [linux]
-    requiresBuild: true
-    optional: true
-
-  /@esbuild/linux-x64@0.19.11:
-    resolution: {integrity: sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==}
+  '@esbuild/linux-x64@0.21.5':
+    resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==}
     engines: {node: '>=12'}
     cpu: [x64]
     os: [linux]
-    requiresBuild: true
-    optional: true
 
-  /@esbuild/linux-x64@0.19.5:
-    resolution: {integrity: sha512-psagl+2RlK1z8zWZOmVdImisMtrUxvwereIdyJTmtmHahJTKb64pAcqoPlx6CewPdvGvUKe2Jw+0Z/0qhSbG1A==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/linux-x64@0.20.2:
-    resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [linux]
-    requiresBuild: true
-    optional: true
-
-  /@esbuild/netbsd-x64@0.19.11:
-    resolution: {integrity: sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==}
+  '@esbuild/netbsd-x64@0.21.5':
+    resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==}
     engines: {node: '>=12'}
     cpu: [x64]
     os: [netbsd]
-    requiresBuild: true
-    optional: true
 
-  /@esbuild/netbsd-x64@0.19.5:
-    resolution: {integrity: sha512-kL2l+xScnAy/E/3119OggX8SrWyBEcqAh8aOY1gr4gPvw76la2GlD4Ymf832UCVbmuWeTf2adkZDK+h0Z/fB4g==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [netbsd]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/netbsd-x64@0.20.2:
-    resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [netbsd]
-    requiresBuild: true
-    optional: true
-
-  /@esbuild/openbsd-x64@0.19.11:
-    resolution: {integrity: sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==}
+  '@esbuild/openbsd-x64@0.21.5':
+    resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==}
     engines: {node: '>=12'}
     cpu: [x64]
     os: [openbsd]
-    requiresBuild: true
-    optional: true
 
-  /@esbuild/openbsd-x64@0.19.5:
-    resolution: {integrity: sha512-sPOfhtzFufQfTBgRnE1DIJjzsXukKSvZxloZbkJDG383q0awVAq600pc1nfqBcl0ice/WN9p4qLc39WhBShRTA==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [openbsd]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/openbsd-x64@0.20.2:
-    resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [openbsd]
-    requiresBuild: true
-    optional: true
-
-  /@esbuild/sunos-x64@0.19.11:
-    resolution: {integrity: sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==}
+  '@esbuild/sunos-x64@0.21.5':
+    resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==}
     engines: {node: '>=12'}
     cpu: [x64]
     os: [sunos]
-    requiresBuild: true
-    optional: true
 
-  /@esbuild/sunos-x64@0.19.5:
-    resolution: {integrity: sha512-dGZkBXaafuKLpDSjKcB0ax0FL36YXCvJNnztjKV+6CO82tTYVDSH2lifitJ29jxRMoUhgkg9a+VA/B03WK5lcg==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [sunos]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/sunos-x64@0.20.2:
-    resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [sunos]
-    requiresBuild: true
-    optional: true
-
-  /@esbuild/win32-arm64@0.19.11:
-    resolution: {integrity: sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==}
+  '@esbuild/win32-arm64@0.21.5':
+    resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==}
     engines: {node: '>=12'}
     cpu: [arm64]
     os: [win32]
-    requiresBuild: true
-    optional: true
 
-  /@esbuild/win32-arm64@0.19.5:
-    resolution: {integrity: sha512-dWVjD9y03ilhdRQ6Xig1NWNgfLtf2o/STKTS+eZuF90fI2BhbwD6WlaiCGKptlqXlURVB5AUOxUj09LuwKGDTg==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [win32]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/win32-arm64@0.20.2:
-    resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==}
-    engines: {node: '>=12'}
-    cpu: [arm64]
-    os: [win32]
-    requiresBuild: true
-    optional: true
-
-  /@esbuild/win32-ia32@0.19.11:
-    resolution: {integrity: sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==}
+  '@esbuild/win32-ia32@0.21.5':
+    resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==}
     engines: {node: '>=12'}
     cpu: [ia32]
     os: [win32]
-    requiresBuild: true
-    optional: true
 
-  /@esbuild/win32-ia32@0.19.5:
-    resolution: {integrity: sha512-4liggWIA4oDgUxqpZwrDhmEfAH4d0iljanDOK7AnVU89T6CzHon/ony8C5LeOdfgx60x5cnQJFZwEydVlYx4iw==}
-    engines: {node: '>=12'}
-    cpu: [ia32]
-    os: [win32]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/win32-ia32@0.20.2:
-    resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==}
-    engines: {node: '>=12'}
-    cpu: [ia32]
-    os: [win32]
-    requiresBuild: true
-    optional: true
-
-  /@esbuild/win32-x64@0.19.11:
-    resolution: {integrity: sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==}
+  '@esbuild/win32-x64@0.21.5':
+    resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==}
     engines: {node: '>=12'}
     cpu: [x64]
     os: [win32]
-    requiresBuild: true
-    optional: true
 
-  /@esbuild/win32-x64@0.19.5:
-    resolution: {integrity: sha512-czTrygUsB/jlM8qEW5MD8bgYU2Xg14lo6kBDXW6HdxKjh8M5PzETGiSHaz9MtbXBYDloHNUAUW2tMiKW4KM9Mw==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [win32]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@esbuild/win32-x64@0.20.2:
-    resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==}
-    engines: {node: '>=12'}
-    cpu: [x64]
-    os: [win32]
-    requiresBuild: true
-    optional: true
-
-  /@eslint-community/eslint-utils@4.4.0(eslint@8.56.0):
+  '@eslint-community/eslint-utils@4.4.0':
     resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     peerDependencies:
       eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
-    dependencies:
-      eslint: 8.56.0
-      eslint-visitor-keys: 3.4.3
 
-  /@eslint-community/regexpp@4.10.0:
-    resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==}
+  '@eslint-community/regexpp@4.11.1':
+    resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==}
     engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
 
-  /@eslint/eslintrc@2.1.4:
+  '@eslint/config-array@0.18.0':
+    resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+  '@eslint/core@0.7.0':
+    resolution: {integrity: sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+  '@eslint/eslintrc@2.1.4':
     resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    dependencies:
-      ajv: 6.12.6
-      debug: 4.3.4
-      espree: 9.6.1
-      globals: 13.20.0
-      ignore: 5.2.4
-      import-fresh: 3.3.0
-      js-yaml: 4.1.0
-      minimatch: 3.1.2
-      strip-json-comments: 3.1.1
-    transitivePeerDependencies:
-      - supports-color
 
-  /@eslint/js@8.56.0:
-    resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==}
+  '@eslint/eslintrc@3.1.0':
+    resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+  '@eslint/js@8.57.1':
+    resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
 
-  /@headlessui/react@1.7.17(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-4am+tzvkqDSSgiwrsEpGWqgGo9dz8qU5M3znCkC4PgkpY4HcCZzEDEvozltGGGHIKl9jbXbZPSH5TWn4sWJdow==}
+  '@eslint/js@9.13.0':
+    resolution: {integrity: sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+  '@eslint/object-schema@2.1.4':
+    resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+  '@eslint/plugin-kit@0.2.1':
+    resolution: {integrity: sha512-HFZ4Mp26nbWk9d/BpvP0YNL6W4UoZF0VFcTw/aPPA8RpOxeFQgK+ClABGgAUXs9Y/RGX/l1vOmrqz1MQt9MNuw==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+  '@headlessui/react@1.7.19':
+    resolution: {integrity: sha512-Ll+8q3OlMJfJbAKM/+/Y2q6PPYbryqNTXDbryx7SXLIDamkF6iQFbriYHga0dY44PvDhvvBWCx1Xj4U5+G4hOw==}
     engines: {node: '>=10'}
     peerDependencies:
       react: ^16 || ^17 || ^18
       react-dom: ^16 || ^17 || ^18
-    dependencies:
-      client-only: 0.0.1
-      react: 18.2.0
-      react-dom: 18.2.0(react@18.2.0)
-    dev: false
 
-  /@heroicons/react@2.1.1(react@18.2.0):
-    resolution: {integrity: sha512-JyyN9Lo66kirbCMuMMRPtJxtKJoIsXKS569ebHGGRKbl8s4CtUfLnyKJxteA+vIKySocO4s1SkTkGS4xtG/yEA==}
+  '@heroicons/react@2.1.5':
+    resolution: {integrity: sha512-FuzFN+BsHa+7OxbvAERtgBTNeZpUjgM/MIizfVkSCL2/edriN0Hx/DWRCR//aPYwO5QX/YlgLGXk+E3PcfZwjA==}
     peerDependencies:
       react: '>= 16'
-    dependencies:
-      react: 18.2.0
-    dev: false
 
-  /@humanwhocodes/config-array@0.11.13:
-    resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==}
+  '@humanfs/core@0.19.0':
+    resolution: {integrity: sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==}
+    engines: {node: '>=18.18.0'}
+
+  '@humanfs/node@0.16.5':
+    resolution: {integrity: sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg==}
+    engines: {node: '>=18.18.0'}
+
+  '@humanwhocodes/config-array@0.13.0':
+    resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==}
     engines: {node: '>=10.10.0'}
-    dependencies:
-      '@humanwhocodes/object-schema': 2.0.1
-      debug: 4.3.4
-      minimatch: 3.1.2
-    transitivePeerDependencies:
-      - supports-color
+    deprecated: Use @eslint/config-array instead
 
-  /@humanwhocodes/module-importer@1.0.1:
+  '@humanwhocodes/module-importer@1.0.1':
     resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
     engines: {node: '>=12.22'}
 
-  /@humanwhocodes/object-schema@2.0.1:
-    resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==}
+  '@humanwhocodes/object-schema@2.0.3':
+    resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==}
+    deprecated: Use @eslint/object-schema instead
 
-  /@hutson/parse-repository-url@3.0.2:
+  '@humanwhocodes/retry@0.3.1':
+    resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
+    engines: {node: '>=18.18'}
+
+  '@hutson/parse-repository-url@3.0.2':
     resolution: {integrity: sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==}
     engines: {node: '>=6.9.0'}
-    dev: true
 
-  /@img/sharp-darwin-arm64@0.33.1:
-    resolution: {integrity: sha512-esr2BZ1x0bo+wl7Gx2hjssYhjrhUsD88VQulI0FrG8/otRQUOxLWHMBd1Y1qo2Gfg2KUvXNpT0ASnV9BzJCexw==}
-    engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+  '@img/sharp-darwin-arm64@0.33.5':
+    resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==}
+    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
     cpu: [arm64]
     os: [darwin]
-    requiresBuild: true
-    optionalDependencies:
-      '@img/sharp-libvips-darwin-arm64': 1.0.0
-    optional: true
 
-  /@img/sharp-darwin-x64@0.33.1:
-    resolution: {integrity: sha512-YrnuB3bXuWdG+hJlXtq7C73lF8ampkhU3tMxg5Hh+E7ikxbUVOU9nlNtVTloDXz6pRHt2y2oKJq7DY/yt+UXYw==}
-    engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+  '@img/sharp-darwin-x64@0.33.5':
+    resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==}
+    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
     cpu: [x64]
     os: [darwin]
-    requiresBuild: true
-    optionalDependencies:
-      '@img/sharp-libvips-darwin-x64': 1.0.0
-    optional: true
 
-  /@img/sharp-libvips-darwin-arm64@1.0.0:
-    resolution: {integrity: sha512-VzYd6OwnUR81sInf3alj1wiokY50DjsHz5bvfnsFpxs5tqQxESoHtJO6xyksDs3RIkyhMWq2FufXo6GNSU9BMw==}
-    engines: {macos: '>=11', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+  '@img/sharp-libvips-darwin-arm64@1.0.4':
+    resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==}
     cpu: [arm64]
     os: [darwin]
-    requiresBuild: true
-    optional: true
 
-  /@img/sharp-libvips-darwin-x64@1.0.0:
-    resolution: {integrity: sha512-dD9OznTlHD6aovRswaPNEy8dKtSAmNo4++tO7uuR4o5VxbVAOoEQ1uSmN4iFAdQneTHws1lkTZeiXPrcCkh6IA==}
-    engines: {macos: '>=10.13', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+  '@img/sharp-libvips-darwin-x64@1.0.4':
+    resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==}
     cpu: [x64]
     os: [darwin]
-    requiresBuild: true
-    optional: true
 
-  /@img/sharp-libvips-linux-arm64@1.0.0:
-    resolution: {integrity: sha512-xTYThiqEZEZc0PRU90yVtM3KE7lw1bKdnDQ9kCTHWbqWyHOe4NpPOtMGy27YnN51q0J5dqRrvicfPbALIOeAZA==}
-    engines: {glibc: '>=2.26', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+  '@img/sharp-libvips-linux-arm64@1.0.4':
+    resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==}
     cpu: [arm64]
     os: [linux]
-    requiresBuild: true
-    optional: true
 
-  /@img/sharp-libvips-linux-arm@1.0.0:
-    resolution: {integrity: sha512-VwgD2eEikDJUk09Mn9Dzi1OW2OJFRQK+XlBTkUNmAWPrtj8Ly0yq05DFgu1VCMx2/DqCGQVi5A1dM9hTmxf3uw==}
-    engines: {glibc: '>=2.28', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+  '@img/sharp-libvips-linux-arm@1.0.5':
+    resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==}
     cpu: [arm]
     os: [linux]
-    requiresBuild: true
-    optional: true
 
-  /@img/sharp-libvips-linux-s390x@1.0.0:
-    resolution: {integrity: sha512-o9E46WWBC6JsBlwU4QyU9578G77HBDT1NInd+aERfxeOPbk0qBZHgoDsQmA2v9TbqJRWzoBPx1aLOhprBMgPjw==}
-    engines: {glibc: '>=2.28', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+  '@img/sharp-libvips-linux-s390x@1.0.4':
+    resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==}
     cpu: [s390x]
     os: [linux]
-    requiresBuild: true
-    optional: true
 
-  /@img/sharp-libvips-linux-x64@1.0.0:
-    resolution: {integrity: sha512-naldaJy4hSVhWBgEjfdBY85CAa4UO+W1nx6a1sWStHZ7EUfNiuBTTN2KUYT5dH1+p/xij1t2QSXfCiFJoC5S/Q==}
-    engines: {glibc: '>=2.26', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+  '@img/sharp-libvips-linux-x64@1.0.4':
+    resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==}
     cpu: [x64]
     os: [linux]
-    requiresBuild: true
-    optional: true
 
-  /@img/sharp-libvips-linuxmusl-arm64@1.0.0:
-    resolution: {integrity: sha512-OdorplCyvmSAPsoJLldtLh3nLxRrkAAAOHsGWGDYfN0kh730gifK+UZb3dWORRa6EusNqCTjfXV4GxvgJ/nPDQ==}
-    engines: {musl: '>=1.2.2', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+  '@img/sharp-libvips-linuxmusl-arm64@1.0.4':
+    resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==}
     cpu: [arm64]
     os: [linux]
-    requiresBuild: true
-    optional: true
 
-  /@img/sharp-libvips-linuxmusl-x64@1.0.0:
-    resolution: {integrity: sha512-FW8iK6rJrg+X2jKD0Ajhjv6y74lToIBEvkZhl42nZt563FfxkCYacrXZtd+q/sRQDypQLzY5WdLkVTbJoPyqNg==}
-    engines: {musl: '>=1.2.2', npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+  '@img/sharp-libvips-linuxmusl-x64@1.0.4':
+    resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==}
     cpu: [x64]
     os: [linux]
-    requiresBuild: true
-    optional: true
 
-  /@img/sharp-linux-arm64@0.33.1:
-    resolution: {integrity: sha512-59B5GRO2d5N3tIfeGHAbJps7cLpuWEQv/8ySd9109ohQ3kzyCACENkFVAnGPX00HwPTQcaBNF7HQYEfZyZUFfw==}
-    engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+  '@img/sharp-linux-arm64@0.33.5':
+    resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==}
+    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
     cpu: [arm64]
     os: [linux]
-    requiresBuild: true
-    optionalDependencies:
-      '@img/sharp-libvips-linux-arm64': 1.0.0
-    optional: true
 
-  /@img/sharp-linux-arm@0.33.1:
-    resolution: {integrity: sha512-Ii4X1vnzzI4j0+cucsrYA5ctrzU9ciXERfJR633S2r39CiD8npqH2GMj63uFZRCFt3E687IenAdbwIpQOJ5BNA==}
-    engines: {glibc: '>=2.28', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+  '@img/sharp-linux-arm@0.33.5':
+    resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==}
+    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
     cpu: [arm]
     os: [linux]
-    requiresBuild: true
-    optionalDependencies:
-      '@img/sharp-libvips-linux-arm': 1.0.0
-    optional: true
 
-  /@img/sharp-linux-s390x@0.33.1:
-    resolution: {integrity: sha512-tRGrb2pHnFUXpOAj84orYNxHADBDIr0J7rrjwQrTNMQMWA4zy3StKmMvwsI7u3dEZcgwuMMooIIGWEWOjnmG8A==}
-    engines: {glibc: '>=2.28', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+  '@img/sharp-linux-s390x@0.33.5':
+    resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==}
+    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
     cpu: [s390x]
     os: [linux]
-    requiresBuild: true
-    optionalDependencies:
-      '@img/sharp-libvips-linux-s390x': 1.0.0
-    optional: true
 
-  /@img/sharp-linux-x64@0.33.1:
-    resolution: {integrity: sha512-4y8osC0cAc1TRpy02yn5omBeloZZwS62fPZ0WUAYQiLhSFSpWJfY/gMrzKzLcHB9ulUV6ExFiu2elMaixKDbeg==}
-    engines: {glibc: '>=2.26', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+  '@img/sharp-linux-x64@0.33.5':
+    resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==}
+    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
     cpu: [x64]
     os: [linux]
-    requiresBuild: true
-    optionalDependencies:
-      '@img/sharp-libvips-linux-x64': 1.0.0
-    optional: true
 
-  /@img/sharp-linuxmusl-arm64@0.33.1:
-    resolution: {integrity: sha512-D3lV6clkqIKUizNS8K6pkuCKNGmWoKlBGh5p0sLO2jQERzbakhu4bVX1Gz+RS4vTZBprKlWaf+/Rdp3ni2jLfA==}
-    engines: {musl: '>=1.2.2', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+  '@img/sharp-linuxmusl-arm64@0.33.5':
+    resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==}
+    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
     cpu: [arm64]
     os: [linux]
-    requiresBuild: true
-    optionalDependencies:
-      '@img/sharp-libvips-linuxmusl-arm64': 1.0.0
-    optional: true
 
-  /@img/sharp-linuxmusl-x64@0.33.1:
-    resolution: {integrity: sha512-LOGKNu5w8uu1evVqUAUKTix2sQu1XDRIYbsi5Q0c/SrXhvJ4QyOx+GaajxmOg5PZSsSnCYPSmhjHHsRBx06/wQ==}
-    engines: {musl: '>=1.2.2', node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+  '@img/sharp-linuxmusl-x64@0.33.5':
+    resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==}
+    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
     cpu: [x64]
     os: [linux]
-    requiresBuild: true
-    optionalDependencies:
-      '@img/sharp-libvips-linuxmusl-x64': 1.0.0
-    optional: true
 
-  /@img/sharp-wasm32@0.33.1:
-    resolution: {integrity: sha512-vWI/sA+0p+92DLkpAMb5T6I8dg4z2vzCUnp8yvxHlwBpzN8CIcO3xlSXrLltSvK6iMsVMNswAv+ub77rsf25lA==}
-    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+  '@img/sharp-wasm32@0.33.5':
+    resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==}
+    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
     cpu: [wasm32]
-    requiresBuild: true
-    dependencies:
-      '@emnapi/runtime': 0.44.0
-    optional: true
 
-  /@img/sharp-win32-ia32@0.33.1:
-    resolution: {integrity: sha512-/xhYkylsKL05R+NXGJc9xr2Tuw6WIVl2lubFJaFYfW4/MQ4J+dgjIo/T4qjNRizrqs/szF/lC9a5+updmY9jaQ==}
-    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+  '@img/sharp-win32-ia32@0.33.5':
+    resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==}
+    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
     cpu: [ia32]
     os: [win32]
-    requiresBuild: true
-    optional: true
 
-  /@img/sharp-win32-x64@0.33.1:
-    resolution: {integrity: sha512-XaM69X0n6kTEsp9tVYYLhXdg7Qj32vYJlAKRutxUsm1UlgQNx6BOhHwZPwukCGXBU2+tH87ip2eV1I/E8MQnZg==}
-    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0', yarn: '>=3.2.0'}
+  '@img/sharp-win32-x64@0.33.5':
+    resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==}
+    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
     cpu: [x64]
     os: [win32]
-    requiresBuild: true
-    optional: true
 
-  /@isaacs/cliui@8.0.2:
+  '@isaacs/cliui@8.0.2':
     resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
     engines: {node: '>=12'}
-    dependencies:
-      string-width: 5.1.2
-      string-width-cjs: /string-width@4.2.3
-      strip-ansi: 7.1.0
-      strip-ansi-cjs: /strip-ansi@6.0.1
-      wrap-ansi: 8.1.0
-      wrap-ansi-cjs: /wrap-ansi@7.0.0
-    dev: true
 
-  /@jest/schemas@29.6.3:
+  '@isaacs/string-locale-compare@1.1.0':
+    resolution: {integrity: sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==}
+
+  '@jest/schemas@29.6.3':
     resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-    dependencies:
-      '@sinclair/typebox': 0.27.8
-    dev: true
 
-  /@jridgewell/gen-mapping@0.1.1:
-    resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==}
-    engines: {node: '>=6.0.0'}
-    dependencies:
-      '@jridgewell/set-array': 1.1.2
-      '@jridgewell/sourcemap-codec': 1.4.15
-
-  /@jridgewell/gen-mapping@0.3.2:
+  '@jridgewell/gen-mapping@0.3.2':
     resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==}
     engines: {node: '>=6.0.0'}
-    dependencies:
-      '@jridgewell/set-array': 1.1.2
-      '@jridgewell/sourcemap-codec': 1.4.15
-      '@jridgewell/trace-mapping': 0.3.17
 
-  /@jridgewell/gen-mapping@0.3.3:
-    resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
+  '@jridgewell/gen-mapping@0.3.5':
+    resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
     engines: {node: '>=6.0.0'}
-    dependencies:
-      '@jridgewell/set-array': 1.1.2
-      '@jridgewell/sourcemap-codec': 1.4.15
-      '@jridgewell/trace-mapping': 0.3.20
-    dev: true
 
-  /@jridgewell/resolve-uri@3.1.0:
+  '@jridgewell/resolve-uri@3.1.0':
     resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
     engines: {node: '>=6.0.0'}
 
-  /@jridgewell/resolve-uri@3.1.1:
-    resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==}
+  '@jridgewell/resolve-uri@3.1.2':
+    resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
     engines: {node: '>=6.0.0'}
 
-  /@jridgewell/set-array@1.1.2:
+  '@jridgewell/set-array@1.1.2':
     resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
     engines: {node: '>=6.0.0'}
 
-  /@jridgewell/source-map@0.3.5:
-    resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==}
-    dependencies:
-      '@jridgewell/gen-mapping': 0.3.3
-      '@jridgewell/trace-mapping': 0.3.20
-    dev: true
+  '@jridgewell/set-array@1.2.1':
+    resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
+    engines: {node: '>=6.0.0'}
 
-  /@jridgewell/sourcemap-codec@1.4.14:
+  '@jridgewell/source-map@0.3.6':
+    resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==}
+
+  '@jridgewell/sourcemap-codec@1.4.14':
     resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==}
 
-  /@jridgewell/sourcemap-codec@1.4.15:
-    resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
+  '@jridgewell/sourcemap-codec@1.5.0':
+    resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
 
-  /@jridgewell/trace-mapping@0.3.17:
+  '@jridgewell/trace-mapping@0.3.17':
     resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==}
-    dependencies:
-      '@jridgewell/resolve-uri': 3.1.0
-      '@jridgewell/sourcemap-codec': 1.4.14
 
-  /@jridgewell/trace-mapping@0.3.20:
-    resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==}
-    dependencies:
-      '@jridgewell/resolve-uri': 3.1.1
-      '@jridgewell/sourcemap-codec': 1.4.15
+  '@jridgewell/trace-mapping@0.3.25':
+    resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
 
-  /@jsdoc/salty@0.2.3:
+  '@jsdoc/salty@0.2.3':
     resolution: {integrity: sha512-bbtCxCkxcnWhi50I+4Lj6mdz9w3pOXOgEQrID8TCZ/DF51fW7M9GCQW2y45SpBDdHd1Eirm1X/Cf6CkAAe8HPg==}
     engines: {node: '>=v12.0.0'}
-    dependencies:
-      lodash: 4.17.21
-    dev: true
 
-  /@lerna/create@8.0.1(typescript@5.3.3):
-    resolution: {integrity: sha512-PDYNUF8Nv5j7DbGvVbizEuYuQbNFZ0+wVOtRPvBQOkC2dMNryi3dJjktEd1QeDX6Wa/JkJWvZ5SMHyr+7H3Rtg==}
+  '@lerna/create@8.1.8':
+    resolution: {integrity: sha512-wi72R01tgjBjzG2kjRyTHl4yCTKDfDMIXRyKz9E/FBa9SkFvUOAE4bdyY9MhEsRZmSWL7+CYE8Flv/HScRpBbA==}
     engines: {node: '>=18.0.0'}
-    dependencies:
-      '@npmcli/run-script': 7.0.2
-      '@nx/devkit': 17.2.8(nx@17.2.8)
-      '@octokit/plugin-enterprise-rest': 6.0.1
-      '@octokit/rest': 19.0.11
-      byte-size: 8.1.1
-      chalk: 4.1.0
-      clone-deep: 4.0.1
-      cmd-shim: 6.0.1
-      columnify: 1.6.0
-      conventional-changelog-core: 5.0.1
-      conventional-recommended-bump: 7.0.1
-      cosmiconfig: 8.3.6(typescript@5.3.3)
-      dedent: 0.7.0
-      execa: 5.0.0
-      fs-extra: 11.1.1
-      get-stream: 6.0.0
-      git-url-parse: 13.1.0
-      glob-parent: 5.1.2
-      globby: 11.1.0
-      graceful-fs: 4.2.11
-      has-unicode: 2.0.1
-      ini: 1.3.8
-      init-package-json: 5.0.0
-      inquirer: 8.2.5
-      is-ci: 3.0.1
-      is-stream: 2.0.0
-      js-yaml: 4.1.0
-      libnpmpublish: 7.3.0
-      load-json-file: 6.2.0
-      lodash: 4.17.21
-      make-dir: 4.0.0
-      minimatch: 3.0.5
-      multimatch: 5.0.0
-      node-fetch: 2.6.7
-      npm-package-arg: 8.1.1
-      npm-packlist: 5.1.1
-      npm-registry-fetch: 14.0.5
-      npmlog: 6.0.2
-      nx: 17.2.8
-      p-map: 4.0.0
-      p-map-series: 2.1.0
-      p-queue: 6.6.2
-      p-reduce: 2.1.0
-      pacote: 17.0.5
-      pify: 5.0.0
-      read-cmd-shim: 4.0.0
-      read-package-json: 6.0.4
-      resolve-from: 5.0.0
-      rimraf: 4.4.1
-      semver: 7.5.4
-      signal-exit: 3.0.7
-      slash: 3.0.0
-      ssri: 9.0.1
-      strong-log-transformer: 2.1.0
-      tar: 6.1.11
-      temp-dir: 1.0.0
-      upath: 2.0.1
-      uuid: 9.0.1
-      validate-npm-package-license: 3.0.4
-      validate-npm-package-name: 5.0.0
-      write-file-atomic: 5.0.1
-      write-pkg: 4.0.0
-      yargs: 17.7.2
-      yargs-parser: 21.1.1
-    transitivePeerDependencies:
-      - '@swc-node/register'
-      - '@swc/core'
-      - bluebird
-      - debug
-      - encoding
-      - supports-color
-      - typescript
-    dev: true
 
-  /@lezer/common@1.0.2:
+  '@lezer/common@1.0.2':
     resolution: {integrity: sha512-SVgiGtMnMnW3ActR8SXgsDhw7a0w0ChHSYAyAUxxrOiJ1OqYWEKk/xJd84tTSPo1mo6DXLObAJALNnd0Hrv7Ng==}
-    dev: false
 
-  /@lezer/common@1.2.0:
+  '@lezer/common@1.2.0':
     resolution: {integrity: sha512-Wmvlm4q6tRpwiy20TnB3yyLTZim38Tkc50dPY8biQRwqE+ati/wD84rm3N15hikvdT4uSg9phs9ubjvcLmkpKg==}
-    dev: false
 
-  /@lezer/highlight@1.2.0:
-    resolution: {integrity: sha512-WrS5Mw51sGrpqjlh3d4/fOwpEV2Hd3YOkp9DBt4k8XZQcoTHZFB7sx030A6OcahF4J1nDQAa3jXlTVVYH50IFA==}
-    dependencies:
-      '@lezer/common': 1.2.0
-    dev: false
+  '@lezer/highlight@1.2.1':
+    resolution: {integrity: sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==}
 
-  /@lezer/javascript@1.4.1:
+  '@lezer/javascript@1.4.1':
     resolution: {integrity: sha512-Hqx36DJeYhKtdpc7wBYPR0XF56ZzIp0IkMO/zNNj80xcaFOV4Oj/P7TQc/8k2TxNhzl7tV5tXS8ZOCPbT4L3nA==}
-    dependencies:
-      '@lezer/highlight': 1.2.0
-      '@lezer/lr': 1.3.1
-    dev: false
 
-  /@lezer/lr@1.3.1:
+  '@lezer/lr@1.3.1':
     resolution: {integrity: sha512-+GymJB/+3gThkk2zHwseaJTI5oa4AuOuj1I2LCslAVq1dFZLSX8SAe4ZlJq1TjezteDXtF/+d4qeWz9JvnrG9Q==}
-    dependencies:
-      '@lezer/common': 1.2.0
-    dev: false
 
-  /@mdx-js/mdx@3.0.0:
-    resolution: {integrity: sha512-Icm0TBKBLYqroYbNW3BPnzMGn+7mwpQOK310aZ7+fkCtiU3aqv2cdcX+nd0Ydo3wI5Rx8bX2Z2QmGb/XcAClCw==}
-    dependencies:
-      '@types/estree': 1.0.0
-      '@types/estree-jsx': 1.0.0
-      '@types/hast': 3.0.2
-      '@types/mdx': 2.0.3
-      collapse-white-space: 2.1.0
-      devlop: 1.1.0
-      estree-util-build-jsx: 3.0.1
-      estree-util-is-identifier-name: 3.0.0
-      estree-util-to-js: 2.0.0
-      estree-walker: 3.0.3
-      hast-util-to-estree: 3.1.0
-      hast-util-to-jsx-runtime: 2.3.0
-      markdown-extensions: 2.0.0
-      periscopic: 3.1.0
-      remark-mdx: 3.0.0
-      remark-parse: 11.0.0
-      remark-rehype: 11.0.0
-      source-map: 0.7.4
-      unified: 11.0.4
-      unist-util-position-from-estree: 2.0.0
-      unist-util-stringify-position: 4.0.0
-      unist-util-visit: 5.0.0
-      vfile: 6.0.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: false
+  '@mdx-js/mdx@3.1.0':
+    resolution: {integrity: sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==}
 
-  /@nanostores/persistent@0.9.1(nanostores@0.9.5):
+  '@nanostores/persistent@0.9.1':
     resolution: {integrity: sha512-ow57Hxm5VMaI5GHET/cVk8hX/iKMmbhcGrB9owfN8p8OHiiJgUlYxe1giacwlAALJXAh2t8bxXh42hHb64BCEA==}
     engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0}
     peerDependencies:
       nanostores: ^0.9.0
-    dependencies:
-      nanostores: 0.9.5
-    dev: false
 
-  /@nanostores/react@0.7.1(nanostores@0.9.5)(react@18.2.0):
-    resolution: {integrity: sha512-EXQg9N4MdI4eJQz/AZLIx3hxQ6BuBmV4Q55bCd5YCSgEOAW7tGTsIZxpRXxvxLXzflNvHTBvfrDNY38TlSVBkQ==}
-    engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0}
+  '@nanostores/react@0.7.3':
+    resolution: {integrity: sha512-/XuLAMENRu/Q71biW4AZ4qmU070vkZgiQ28gaTSNRPm2SZF5zGAR81zPE1MaMB4SeOp6ZTst92NBaG75XSspNg==}
+    engines: {node: ^18.0.0 || >=20.0.0}
     peerDependencies:
-      nanostores: ^0.9.0
+      nanostores: ^0.9.0 || ^0.10.0 || ^0.11.0
       react: '>=18.0.0'
-    dependencies:
-      nanostores: 0.9.5
-      react: 18.2.0
-    dev: false
 
-  /@nodelib/fs.scandir@2.1.5:
+  '@nodelib/fs.scandir@2.1.5':
     resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
     engines: {node: '>= 8'}
-    dependencies:
-      '@nodelib/fs.stat': 2.0.5
-      run-parallel: 1.2.0
 
-  /@nodelib/fs.stat@2.0.5:
+  '@nodelib/fs.stat@2.0.5':
     resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
     engines: {node: '>= 8'}
 
-  /@nodelib/fs.walk@1.2.8:
+  '@nodelib/fs.walk@1.2.8':
     resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
     engines: {node: '>= 8'}
-    dependencies:
-      '@nodelib/fs.scandir': 2.1.5
-      fastq: 1.15.0
 
-  /@npmcli/agent@2.2.0:
-    resolution: {integrity: sha512-2yThA1Es98orMkpSLVqlDZAMPK3jHJhifP2gnNUdk1754uZ8yI5c+ulCoVG+WlntQA6MzhrURMXjSd9Z7dJ2/Q==}
+  '@npmcli/agent@2.2.2':
+    resolution: {integrity: sha512-OrcNPXdpSl9UX7qPVRWbmWMCSXrcDa2M9DvrbOTj7ao1S4PlqVFYv9/yLKMkrJKZ/V5A/kDBC690or307i26Og==}
     engines: {node: ^16.14.0 || >=18.0.0}
-    dependencies:
-      agent-base: 7.1.0
-      http-proxy-agent: 7.0.0
-      https-proxy-agent: 7.0.2
-      lru-cache: 10.1.0
-      socks-proxy-agent: 8.0.2
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
 
-  /@npmcli/fs@3.1.0:
-    resolution: {integrity: sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==}
+  '@npmcli/arborist@7.5.4':
+    resolution: {integrity: sha512-nWtIc6QwwoUORCRNzKx4ypHqCk3drI+5aeYdMTQQiRCcn4lOOgfQh7WyZobGYTxXPSq1VwV53lkpN/BRlRk08g==}
+    engines: {node: ^16.14.0 || >=18.0.0}
+    hasBin: true
+
+  '@npmcli/fs@3.1.1':
+    resolution: {integrity: sha512-q9CRWjpHCMIh5sVyefoD1cA7PkvILqCZsnSOEUUivORLjxCO/Irmue2DprETiNgEqktDBZaM1Bi+jrarx1XdCg==}
     engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
-    dependencies:
-      semver: 7.5.4
-    dev: true
 
-  /@npmcli/git@5.0.3:
-    resolution: {integrity: sha512-UZp9NwK+AynTrKvHn5k3KviW/hA5eENmFsu3iAPe7sWRt0lFUdsY/wXIYjpDFe7cdSNwOIzbObfwgt6eL5/2zw==}
+  '@npmcli/git@5.0.8':
+    resolution: {integrity: sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==}
     engines: {node: ^16.14.0 || >=18.0.0}
-    dependencies:
-      '@npmcli/promise-spawn': 7.0.0
-      lru-cache: 10.1.0
-      npm-pick-manifest: 9.0.0
-      proc-log: 3.0.0
-      promise-inflight: 1.0.1
-      promise-retry: 2.0.1
-      semver: 7.5.4
-      which: 4.0.0
-    transitivePeerDependencies:
-      - bluebird
-    dev: true
 
-  /@npmcli/installed-package-contents@2.0.2:
-    resolution: {integrity: sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==}
+  '@npmcli/installed-package-contents@2.1.0':
+    resolution: {integrity: sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==}
     engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
     hasBin: true
-    dependencies:
-      npm-bundled: 3.0.0
-      npm-normalize-package-bin: 3.0.0
-    dev: true
 
-  /@npmcli/node-gyp@3.0.0:
+  '@npmcli/map-workspaces@3.0.6':
+    resolution: {integrity: sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA==}
+    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+  '@npmcli/metavuln-calculator@7.1.1':
+    resolution: {integrity: sha512-Nkxf96V0lAx3HCpVda7Vw4P23RILgdi/5K1fmj2tZkWIYLpXAN8k2UVVOsW16TsS5F8Ws2I7Cm+PU1/rsVF47g==}
+    engines: {node: ^16.14.0 || >=18.0.0}
+
+  '@npmcli/name-from-folder@2.0.0':
+    resolution: {integrity: sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==}
+    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+  '@npmcli/node-gyp@3.0.0':
     resolution: {integrity: sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==}
     engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
-    dev: true
 
-  /@npmcli/promise-spawn@7.0.0:
-    resolution: {integrity: sha512-wBqcGsMELZna0jDblGd7UXgOby45TQaMWmbFwWX+SEotk4HV6zG2t6rT9siyLhPk4P6YYqgfL1UO8nMWDBVJXQ==}
+  '@npmcli/package-json@5.2.0':
+    resolution: {integrity: sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ==}
     engines: {node: ^16.14.0 || >=18.0.0}
-    dependencies:
-      which: 4.0.0
-    dev: true
 
-  /@npmcli/run-script@7.0.2:
-    resolution: {integrity: sha512-Omu0rpA8WXvcGeY6DDzyRoY1i5DkCBkzyJ+m2u7PD6quzb0TvSqdIPOkTn8ZBOj7LbbcbMfZ3c5skwSu6m8y2w==}
+  '@npmcli/promise-spawn@7.0.2':
+    resolution: {integrity: sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==}
     engines: {node: ^16.14.0 || >=18.0.0}
-    dependencies:
-      '@npmcli/node-gyp': 3.0.0
-      '@npmcli/promise-spawn': 7.0.0
-      node-gyp: 10.0.1
-      read-package-json-fast: 3.0.2
-      which: 4.0.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
 
-  /@nrwl/devkit@17.2.8(nx@17.2.8):
+  '@npmcli/query@3.1.0':
+    resolution: {integrity: sha512-C/iR0tk7KSKGldibYIB9x8GtO/0Bd0I2mhOaDb8ucQL/bQVTmGoeREaFj64Z5+iCBRf3dQfed0CjJL7I8iTkiQ==}
+    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+  '@npmcli/redact@2.0.1':
+    resolution: {integrity: sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==}
+    engines: {node: ^16.14.0 || >=18.0.0}
+
+  '@npmcli/run-script@8.1.0':
+    resolution: {integrity: sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==}
+    engines: {node: ^16.14.0 || >=18.0.0}
+
+  '@nrwl/devkit@17.2.8':
     resolution: {integrity: sha512-l2dFy5LkWqSA45s6pee6CoqJeluH+sjRdVnAAQfjLHRNSx6mFAKblyzq5h1f4P0EUCVVVqLs+kVqmNx5zxYqvw==}
-    dependencies:
-      '@nx/devkit': 17.2.8(nx@17.2.8)
-    transitivePeerDependencies:
-      - nx
-    dev: true
 
-  /@nrwl/tao@17.2.8:
+  '@nrwl/tao@17.2.8':
     resolution: {integrity: sha512-Qpk5YKeJ+LppPL/wtoDyNGbJs2MsTi6qyX/RdRrEc8lc4bk6Cw3Oul1qTXCI6jT0KzTz+dZtd0zYD/G7okkzvg==}
     hasBin: true
-    dependencies:
-      nx: 17.2.8
-      tslib: 2.5.0
-    transitivePeerDependencies:
-      - '@swc-node/register'
-      - '@swc/core'
-      - debug
-    dev: true
 
-  /@nx/devkit@17.2.8(nx@17.2.8):
+  '@nx/devkit@17.2.8':
     resolution: {integrity: sha512-6LtiQihtZwqz4hSrtT5cCG5XMCWppG6/B8c1kNksg97JuomELlWyUyVF+sxmeERkcLYFaKPTZytP0L3dmCFXaw==}
     peerDependencies:
       nx: '>= 16 <= 18'
-    dependencies:
-      '@nrwl/devkit': 17.2.8(nx@17.2.8)
-      ejs: 3.1.8
-      enquirer: 2.3.6
-      ignore: 5.2.4
-      nx: 17.2.8
-      semver: 7.5.3
-      tmp: 0.2.1
-      tslib: 2.5.0
-    dev: true
 
-  /@nx/nx-darwin-arm64@17.2.8:
+  '@nx/nx-darwin-arm64@17.2.8':
     resolution: {integrity: sha512-dMb0uxug4hM7tusISAU1TfkDK3ixYmzc1zhHSZwpR7yKJIyKLtUpBTbryt8nyso37AS1yH+dmfh2Fj2WxfBHTg==}
     engines: {node: '>= 10'}
     cpu: [arm64]
     os: [darwin]
-    requiresBuild: true
-    dev: true
-    optional: true
 
-  /@nx/nx-darwin-x64@17.2.8:
+  '@nx/nx-darwin-x64@17.2.8':
     resolution: {integrity: sha512-0cXzp1tGr7/6lJel102QiLA4NkaLCkQJj6VzwbwuvmuCDxPbpmbz7HC1tUteijKBtOcdXit1/MEoEU007To8Bw==}
     engines: {node: '>= 10'}
     cpu: [x64]
     os: [darwin]
-    requiresBuild: true
-    dev: true
-    optional: true
 
-  /@nx/nx-freebsd-x64@17.2.8:
+  '@nx/nx-freebsd-x64@17.2.8':
     resolution: {integrity: sha512-YFMgx5Qpp2btCgvaniDGdu7Ctj56bfFvbbaHQWmOeBPK1krNDp2mqp8HK6ZKOfEuDJGOYAp7HDtCLvdZKvJxzA==}
     engines: {node: '>= 10'}
     cpu: [x64]
     os: [freebsd]
-    requiresBuild: true
-    dev: true
-    optional: true
 
-  /@nx/nx-linux-arm-gnueabihf@17.2.8:
+  '@nx/nx-linux-arm-gnueabihf@17.2.8':
     resolution: {integrity: sha512-iN2my6MrhLRkVDtdivQHugK8YmR7URo1wU9UDuHQ55z3tEcny7LV3W9NSsY9UYPK/FrxdDfevj0r2hgSSdhnzA==}
     engines: {node: '>= 10'}
     cpu: [arm]
     os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
 
-  /@nx/nx-linux-arm64-gnu@17.2.8:
+  '@nx/nx-linux-arm64-gnu@17.2.8':
     resolution: {integrity: sha512-Iy8BjoW6mOKrSMiTGujUcNdv+xSM1DALTH6y3iLvNDkGbjGK1Re6QNnJAzqcXyDpv32Q4Fc57PmuexyysZxIGg==}
     engines: {node: '>= 10'}
     cpu: [arm64]
     os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
 
-  /@nx/nx-linux-arm64-musl@17.2.8:
+  '@nx/nx-linux-arm64-musl@17.2.8':
     resolution: {integrity: sha512-9wkAxWzknjpzdofL1xjtU6qPFF1PHlvKCZI3hgEYJDo4mQiatGI+7Ttko+lx/ZMP6v4+Umjtgq7+qWrApeKamQ==}
     engines: {node: '>= 10'}
     cpu: [arm64]
     os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
 
-  /@nx/nx-linux-x64-gnu@17.2.8:
+  '@nx/nx-linux-x64-gnu@17.2.8':
     resolution: {integrity: sha512-sjG1bwGsjLxToasZ3lShildFsF0eyeGu+pOQZIp9+gjFbeIkd19cTlCnHrOV9hoF364GuKSXQyUlwtFYFR4VTQ==}
     engines: {node: '>= 10'}
     cpu: [x64]
     os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
 
-  /@nx/nx-linux-x64-musl@17.2.8:
+  '@nx/nx-linux-x64-musl@17.2.8':
     resolution: {integrity: sha512-QiakXZ1xBCIptmkGEouLHQbcM4klQkcr+kEaz2PlNwy/sW3gH1b/1c0Ed5J1AN9xgQxWspriAONpScYBRgxdhA==}
     engines: {node: '>= 10'}
     cpu: [x64]
     os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
 
-  /@nx/nx-win32-arm64-msvc@17.2.8:
+  '@nx/nx-win32-arm64-msvc@17.2.8':
     resolution: {integrity: sha512-XBWUY/F/GU3vKN9CAxeI15gM4kr3GOBqnzFZzoZC4qJt2hKSSUEWsMgeZtsMgeqEClbi4ZyCCkY7YJgU32WUGA==}
     engines: {node: '>= 10'}
     cpu: [arm64]
     os: [win32]
-    requiresBuild: true
-    dev: true
-    optional: true
 
-  /@nx/nx-win32-x64-msvc@17.2.8:
+  '@nx/nx-win32-x64-msvc@17.2.8':
     resolution: {integrity: sha512-HTqDv+JThlLzbcEm/3f+LbS5/wYQWzb5YDXbP1wi7nlCTihNZOLNqGOkEmwlrR5tAdNHPRpHSmkYg4305W0CtA==}
     engines: {node: '>= 10'}
     cpu: [x64]
     os: [win32]
-    requiresBuild: true
-    dev: true
-    optional: true
 
-  /@octokit/auth-token@3.0.3:
+  '@octokit/auth-token@3.0.3':
     resolution: {integrity: sha512-/aFM2M4HVDBT/jjDBa84sJniv1t9Gm/rLkalaz9htOm+L+8JMj1k9w0CkUdcxNyNxZPlTxKPVko+m1VlM58ZVA==}
     engines: {node: '>= 14'}
-    dependencies:
-      '@octokit/types': 9.0.0
-    dev: true
 
-  /@octokit/core@4.2.4:
+  '@octokit/core@4.2.4':
     resolution: {integrity: sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==}
     engines: {node: '>= 14'}
-    dependencies:
-      '@octokit/auth-token': 3.0.3
-      '@octokit/graphql': 5.0.5
-      '@octokit/request': 6.2.3
-      '@octokit/request-error': 3.0.3
-      '@octokit/types': 9.0.0
-      before-after-hook: 2.2.3
-      universal-user-agent: 6.0.0
-    transitivePeerDependencies:
-      - encoding
-    dev: true
 
-  /@octokit/endpoint@7.0.5:
+  '@octokit/endpoint@7.0.5':
     resolution: {integrity: sha512-LG4o4HMY1Xoaec87IqQ41TQ+glvIeTKqfjkCEmt5AIwDZJwQeVZFIEYXrYY6yLwK+pAScb9Gj4q+Nz2qSw1roA==}
     engines: {node: '>= 14'}
-    dependencies:
-      '@octokit/types': 9.0.0
-      is-plain-object: 5.0.0
-      universal-user-agent: 6.0.0
-    dev: true
 
-  /@octokit/graphql@5.0.5:
+  '@octokit/graphql@5.0.5':
     resolution: {integrity: sha512-Qwfvh3xdqKtIznjX9lz2D458r7dJPP8l6r4GQkIdWQouZwHQK0mVT88uwiU2bdTU2OtT1uOlKpRciUWldpG0yQ==}
     engines: {node: '>= 14'}
-    dependencies:
-      '@octokit/request': 6.2.3
-      '@octokit/types': 9.0.0
-      universal-user-agent: 6.0.0
-    transitivePeerDependencies:
-      - encoding
-    dev: true
 
-  /@octokit/openapi-types@16.0.0:
+  '@octokit/openapi-types@16.0.0':
     resolution: {integrity: sha512-JbFWOqTJVLHZSUUoF4FzAZKYtqdxWu9Z5m2QQnOyEa04fOFljvyh7D3GYKbfuaSWisqehImiVIMG4eyJeP5VEA==}
-    dev: true
 
-  /@octokit/openapi-types@18.1.1:
+  '@octokit/openapi-types@18.1.1':
     resolution: {integrity: sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==}
-    dev: true
 
-  /@octokit/plugin-enterprise-rest@6.0.1:
+  '@octokit/plugin-enterprise-rest@6.0.1':
     resolution: {integrity: sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==}
-    dev: true
 
-  /@octokit/plugin-paginate-rest@6.1.2(@octokit/core@4.2.4):
+  '@octokit/plugin-paginate-rest@6.1.2':
     resolution: {integrity: sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==}
     engines: {node: '>= 14'}
     peerDependencies:
       '@octokit/core': '>=4'
-    dependencies:
-      '@octokit/core': 4.2.4
-      '@octokit/tsconfig': 1.0.2
-      '@octokit/types': 9.3.2
-    dev: true
 
-  /@octokit/plugin-request-log@1.0.4(@octokit/core@4.2.4):
+  '@octokit/plugin-request-log@1.0.4':
     resolution: {integrity: sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==}
     peerDependencies:
       '@octokit/core': '>=3'
-    dependencies:
-      '@octokit/core': 4.2.4
-    dev: true
 
-  /@octokit/plugin-rest-endpoint-methods@7.2.3(@octokit/core@4.2.4):
+  '@octokit/plugin-rest-endpoint-methods@7.2.3':
     resolution: {integrity: sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA==}
     engines: {node: '>= 14'}
     peerDependencies:
       '@octokit/core': '>=3'
-    dependencies:
-      '@octokit/core': 4.2.4
-      '@octokit/types': 10.0.0
-    dev: true
 
-  /@octokit/request-error@3.0.3:
+  '@octokit/request-error@3.0.3':
     resolution: {integrity: sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==}
     engines: {node: '>= 14'}
-    dependencies:
-      '@octokit/types': 9.0.0
-      deprecation: 2.3.1
-      once: 1.4.0
-    dev: true
 
-  /@octokit/request@6.2.3:
+  '@octokit/request@6.2.3':
     resolution: {integrity: sha512-TNAodj5yNzrrZ/VxP+H5HiYaZep0H3GU0O7PaF+fhDrt8FPrnkei9Aal/txsN/1P7V3CPiThG0tIvpPDYUsyAA==}
     engines: {node: '>= 14'}
-    dependencies:
-      '@octokit/endpoint': 7.0.5
-      '@octokit/request-error': 3.0.3
-      '@octokit/types': 9.0.0
-      is-plain-object: 5.0.0
-      node-fetch: 2.6.8
-      universal-user-agent: 6.0.0
-    transitivePeerDependencies:
-      - encoding
-    dev: true
 
-  /@octokit/rest@19.0.11:
+  '@octokit/rest@19.0.11':
     resolution: {integrity: sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw==}
     engines: {node: '>= 14'}
-    dependencies:
-      '@octokit/core': 4.2.4
-      '@octokit/plugin-paginate-rest': 6.1.2(@octokit/core@4.2.4)
-      '@octokit/plugin-request-log': 1.0.4(@octokit/core@4.2.4)
-      '@octokit/plugin-rest-endpoint-methods': 7.2.3(@octokit/core@4.2.4)
-    transitivePeerDependencies:
-      - encoding
-    dev: true
 
-  /@octokit/tsconfig@1.0.2:
+  '@octokit/tsconfig@1.0.2':
     resolution: {integrity: sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==}
-    dev: true
 
-  /@octokit/types@10.0.0:
+  '@octokit/types@10.0.0':
     resolution: {integrity: sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg==}
-    dependencies:
-      '@octokit/openapi-types': 18.1.1
-    dev: true
 
-  /@octokit/types@9.0.0:
+  '@octokit/types@9.0.0':
     resolution: {integrity: sha512-LUewfj94xCMH2rbD5YJ+6AQ4AVjFYTgpp6rboWM5T7N3IsIF65SBEOVcYMGAEzO/kKNiNaW4LoWtoThOhH06gw==}
-    dependencies:
-      '@octokit/openapi-types': 16.0.0
-    dev: true
 
-  /@octokit/types@9.3.2:
+  '@octokit/types@9.3.2':
     resolution: {integrity: sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==}
-    dependencies:
-      '@octokit/openapi-types': 18.1.1
-    dev: true
 
-  /@pkgjs/parseargs@0.11.0:
+  '@oslojs/encoding@1.1.0':
+    resolution: {integrity: sha512-70wQhgYmndg4GCPxPPxPGevRKqTIJ2Nh4OkiMWmDAVYsTQ+Ta7Sq+rPevXyXGdzr30/qZBnyOalCszoMxlyldQ==}
+
+  '@pkgjs/parseargs@0.11.0':
     resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
     engines: {node: '>=14'}
-    requiresBuild: true
-    dev: true
-    optional: true
 
-  /@polka/url@1.0.0-next.24:
-    resolution: {integrity: sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==}
-    dev: true
+  '@polka/url@1.0.0-next.28':
+    resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==}
 
-  /@replit/codemirror-emacs@6.0.1(@codemirror/autocomplete@6.11.1)(@codemirror/commands@6.3.3)(@codemirror/search@6.5.5)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-2WYkODZGH1QVAXWuOxTMCwktkoZyv/BjYdJi2A5w4fRrmOQFuIACzb6pO9dgU3J+Pm2naeiX2C8veZr/3/r6AA==}
+  '@replit/codemirror-emacs@6.1.0':
+    resolution: {integrity: sha512-74DITnht6Cs6sHg02PQ169IKb1XgtyhI9sLD0JeOFco6Ds18PT+dkD8+DgXBDokne9UIFKsBbKPnpFRAz60/Lw==}
     peerDependencies:
       '@codemirror/autocomplete': ^6.0.2
       '@codemirror/commands': ^6.0.0
       '@codemirror/search': ^6.0.0
       '@codemirror/state': ^6.0.1
       '@codemirror/view': ^6.3.0
-    dependencies:
-      '@codemirror/autocomplete': 6.11.1(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)(@lezer/common@1.2.0)
-      '@codemirror/commands': 6.3.3
-      '@codemirror/search': 6.5.5
-      '@codemirror/state': 6.4.0
-      '@codemirror/view': 6.23.0
-    dev: false
 
-  /@replit/codemirror-vim@6.1.0(@codemirror/commands@6.3.3)(@codemirror/language@6.10.0)(@codemirror/search@6.5.5)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-XATcrMBYphSgTTDHaL5cTdBKA+/kwg8x0kHpX9xFHkI8c2G9+nXdkIzFCtk76x1VDYQSlT6orNhudNt+9H9zOA==}
+  '@replit/codemirror-vim@6.2.1':
+    resolution: {integrity: sha512-qDAcGSHBYU5RrdO//qCmD8K9t6vbP327iCj/iqrkVnjbrpFhrjOt92weGXGHmTNRh16cUtkUZ7Xq7rZf+8HVow==}
     peerDependencies:
       '@codemirror/commands': ^6.0.0
       '@codemirror/language': ^6.1.0
       '@codemirror/search': ^6.2.0
       '@codemirror/state': ^6.0.1
       '@codemirror/view': ^6.0.3
-    dependencies:
-      '@codemirror/commands': 6.3.3
-      '@codemirror/language': 6.10.0
-      '@codemirror/search': 6.5.5
-      '@codemirror/state': 6.4.0
-      '@codemirror/view': 6.23.0
-    dev: false
 
-  /@replit/codemirror-vscode-keymap@6.0.2(@codemirror/autocomplete@6.11.1)(@codemirror/commands@6.3.3)(@codemirror/language@6.10.0)(@codemirror/lint@6.4.2)(@codemirror/search@6.5.5)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
+  '@replit/codemirror-vscode-keymap@6.0.2':
     resolution: {integrity: sha512-j45qTwGxzpsv82lMD/NreGDORFKSctMDVkGRopaP+OrzSzv+pXDQuU3LnFvKpasyjVT0lf+PKG1v2DSCn/vxxg==}
     peerDependencies:
       '@codemirror/autocomplete': ^6.0.0
@@ -3873,17 +2152,8 @@ packages:
       '@codemirror/search': ^6.0.0
       '@codemirror/state': ^6.0.0
       '@codemirror/view': ^6.0.0
-    dependencies:
-      '@codemirror/autocomplete': 6.11.1(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)(@lezer/common@1.2.0)
-      '@codemirror/commands': 6.3.3
-      '@codemirror/language': 6.10.0
-      '@codemirror/lint': 6.4.2
-      '@codemirror/search': 6.5.5
-      '@codemirror/state': 6.4.0
-      '@codemirror/view': 6.23.0
-    dev: false
 
-  /@rollup/plugin-babel@5.3.1(@babel/core@7.23.7)(rollup@2.79.1):
+  '@rollup/plugin-babel@5.3.1':
     resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==}
     engines: {node: '>= 10.0.0'}
     peerDependencies:
@@ -3893,545 +2163,7872 @@ packages:
     peerDependenciesMeta:
       '@types/babel__core':
         optional: true
-    dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-module-imports': 7.22.15
-      '@rollup/pluginutils': 3.1.0(rollup@2.79.1)
-      rollup: 2.79.1
-    dev: true
 
-  /@rollup/plugin-node-resolve@11.2.1(rollup@2.79.1):
+  '@rollup/plugin-node-resolve@11.2.1':
     resolution: {integrity: sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==}
     engines: {node: '>= 10.0.0'}
     peerDependencies:
       rollup: ^1.20.0||^2.0.0
+
+  '@rollup/plugin-replace@2.4.2':
+    resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==}
+    peerDependencies:
+      rollup: ^1.20.0 || ^2.0.0
+
+  '@rollup/plugin-replace@5.0.7':
+    resolution: {integrity: sha512-PqxSfuorkHz/SPpyngLyg5GCEkOcee9M1bkxiVDr41Pd61mqP1PLOoDPbpl44SB2mQGKwV/In74gqQmGITOhEQ==}
+    engines: {node: '>=14.0.0'}
+    peerDependencies:
+      rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+    peerDependenciesMeta:
+      rollup:
+        optional: true
+
+  '@rollup/pluginutils@3.1.0':
+    resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==}
+    engines: {node: '>= 8.0.0'}
+    peerDependencies:
+      rollup: ^1.20.0||^2.0.0
+
+  '@rollup/pluginutils@5.1.2':
+    resolution: {integrity: sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==}
+    engines: {node: '>=14.0.0'}
+    peerDependencies:
+      rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+    peerDependenciesMeta:
+      rollup:
+        optional: true
+
+  '@rollup/rollup-android-arm-eabi@4.24.0':
+    resolution: {integrity: sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==}
+    cpu: [arm]
+    os: [android]
+
+  '@rollup/rollup-android-arm64@4.24.0':
+    resolution: {integrity: sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==}
+    cpu: [arm64]
+    os: [android]
+
+  '@rollup/rollup-darwin-arm64@4.24.0':
+    resolution: {integrity: sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==}
+    cpu: [arm64]
+    os: [darwin]
+
+  '@rollup/rollup-darwin-x64@4.24.0':
+    resolution: {integrity: sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==}
+    cpu: [x64]
+    os: [darwin]
+
+  '@rollup/rollup-linux-arm-gnueabihf@4.24.0':
+    resolution: {integrity: sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==}
+    cpu: [arm]
+    os: [linux]
+
+  '@rollup/rollup-linux-arm-musleabihf@4.24.0':
+    resolution: {integrity: sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==}
+    cpu: [arm]
+    os: [linux]
+
+  '@rollup/rollup-linux-arm64-gnu@4.24.0':
+    resolution: {integrity: sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==}
+    cpu: [arm64]
+    os: [linux]
+
+  '@rollup/rollup-linux-arm64-musl@4.24.0':
+    resolution: {integrity: sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==}
+    cpu: [arm64]
+    os: [linux]
+
+  '@rollup/rollup-linux-powerpc64le-gnu@4.24.0':
+    resolution: {integrity: sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==}
+    cpu: [ppc64]
+    os: [linux]
+
+  '@rollup/rollup-linux-riscv64-gnu@4.24.0':
+    resolution: {integrity: sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==}
+    cpu: [riscv64]
+    os: [linux]
+
+  '@rollup/rollup-linux-s390x-gnu@4.24.0':
+    resolution: {integrity: sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==}
+    cpu: [s390x]
+    os: [linux]
+
+  '@rollup/rollup-linux-x64-gnu@4.24.0':
+    resolution: {integrity: sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==}
+    cpu: [x64]
+    os: [linux]
+
+  '@rollup/rollup-linux-x64-musl@4.24.0':
+    resolution: {integrity: sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==}
+    cpu: [x64]
+    os: [linux]
+
+  '@rollup/rollup-win32-arm64-msvc@4.24.0':
+    resolution: {integrity: sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==}
+    cpu: [arm64]
+    os: [win32]
+
+  '@rollup/rollup-win32-ia32-msvc@4.24.0':
+    resolution: {integrity: sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==}
+    cpu: [ia32]
+    os: [win32]
+
+  '@rollup/rollup-win32-x64-msvc@4.24.0':
+    resolution: {integrity: sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==}
+    cpu: [x64]
+    os: [win32]
+
+  '@rtsao/scc@1.1.0':
+    resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
+
+  '@shikijs/core@1.22.0':
+    resolution: {integrity: sha512-S8sMe4q71TJAW+qG93s5VaiihujRK6rqDFqBnxqvga/3LvqHEnxqBIOPkt//IdXVtHkQWKu4nOQNk0uBGicU7Q==}
+
+  '@shikijs/engine-javascript@1.22.0':
+    resolution: {integrity: sha512-AeEtF4Gcck2dwBqCFUKYfsCq0s+eEbCEbkUuFou53NZ0sTGnJnJ/05KHQFZxpii5HMXbocV9URYVowOP2wH5kw==}
+
+  '@shikijs/engine-oniguruma@1.22.0':
+    resolution: {integrity: sha512-5iBVjhu/DYs1HB0BKsRRFipRrD7rqjxlWTj4F2Pf+nQSPqc3kcyqFFeZXnBMzDf0HdqaFVvhDRAGiYNvyLP+Mw==}
+
+  '@shikijs/types@1.22.0':
+    resolution: {integrity: sha512-Fw/Nr7FGFhlQqHfxzZY8Cwtwk5E9nKDUgeLjZgt3UuhcM3yJR9xj3ZGNravZZok8XmEZMiYkSMTPlPkULB8nww==}
+
+  '@shikijs/vscode-textmate@9.3.0':
+    resolution: {integrity: sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==}
+
+  '@sigstore/bundle@2.3.2':
+    resolution: {integrity: sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==}
+    engines: {node: ^16.14.0 || >=18.0.0}
+
+  '@sigstore/core@1.1.0':
+    resolution: {integrity: sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==}
+    engines: {node: ^16.14.0 || >=18.0.0}
+
+  '@sigstore/protobuf-specs@0.3.2':
+    resolution: {integrity: sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==}
+    engines: {node: ^16.14.0 || >=18.0.0}
+
+  '@sigstore/sign@2.3.2':
+    resolution: {integrity: sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==}
+    engines: {node: ^16.14.0 || >=18.0.0}
+
+  '@sigstore/tuf@2.3.4':
+    resolution: {integrity: sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==}
+    engines: {node: ^16.14.0 || >=18.0.0}
+
+  '@sigstore/verify@1.2.1':
+    resolution: {integrity: sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==}
+    engines: {node: ^16.14.0 || >=18.0.0}
+
+  '@sinclair/typebox@0.27.8':
+    resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
+
+  '@supabase/auth-js@2.65.1':
+    resolution: {integrity: sha512-IA7i2Xq2SWNCNMKxwmPlHafBQda0qtnFr8QnyyBr+KaSxoXXqEzFCnQ1dGTy6bsZjVBgXu++o3qrDypTspaAPw==}
+
+  '@supabase/functions-js@2.4.3':
+    resolution: {integrity: sha512-sOLXy+mWRyu4LLv1onYydq+10mNRQ4rzqQxNhbrKLTLTcdcmS9hbWif0bGz/NavmiQfPs4ZcmQJp4WqOXlR4AQ==}
+
+  '@supabase/node-fetch@2.6.15':
+    resolution: {integrity: sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==}
+    engines: {node: 4.x || >=6.0.0}
+
+  '@supabase/postgrest-js@1.16.2':
+    resolution: {integrity: sha512-dA/CIrSO2YDQ6ABNpbvEg9DwBMMbuKfWaFuZAU9c66PenoLSoIoyXk1Yq/wC2XISgEIqaMHmTrDAAsO80kjHqg==}
+
+  '@supabase/realtime-js@2.10.7':
+    resolution: {integrity: sha512-OLI0hiSAqQSqRpGMTUwoIWo51eUivSYlaNBgxsXZE7PSoWh12wPRdVt0psUMaUzEonSB85K21wGc7W5jHnT6uA==}
+
+  '@supabase/storage-js@2.7.1':
+    resolution: {integrity: sha512-asYHcyDR1fKqrMpytAS1zjyEfvxuOIp1CIXX7ji4lHHcJKqyk+sLl/Vxgm4sN6u8zvuUtae9e4kDxQP2qrwWBA==}
+
+  '@supabase/supabase-js@2.45.5':
+    resolution: {integrity: sha512-xTPsv33Hcj6C38SXa4nKobwEwkNQuwcCKtcuBsDT6bvphl1VUAO3x2QoLOuuglJzk2Oaf3WcVsvRcxXNE8PG/g==}
+
+  '@surma/rollup-plugin-off-main-thread@2.2.3':
+    resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==}
+
+  '@tailwindcss/forms@0.5.9':
+    resolution: {integrity: sha512-tM4XVr2+UVTxXJzey9Twx48c1gcxFStqn1pQz0tRsX8o3DvxhN5oY5pvyAbUx7VTaZxpej4Zzvc6h+1RJBzpIg==}
+    peerDependencies:
+      tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20'
+
+  '@tailwindcss/typography@0.5.15':
+    resolution: {integrity: sha512-AqhlCXl+8grUz8uqExv5OTtgpjuVIwFTSXTrh8y9/pw6q2ek7fJ+Y8ZEVw7EB2DCcuCOtEjf9w3+J3rzts01uA==}
+    peerDependencies:
+      tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20'
+
+  '@tanstack/react-virtual@3.10.8':
+    resolution: {integrity: sha512-VbzbVGSsZlQktyLrP5nxE+vE1ZR+U0NFAWPbJLoG2+DKPwd2D7dVICTVIIaYlJqX1ZCEnYDbaOpmMwbsyhBoIA==}
+    peerDependencies:
+      react: ^16.8.0 || ^17.0.0 || ^18.0.0
+      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+
+  '@tanstack/virtual-core@3.10.8':
+    resolution: {integrity: sha512-PBu00mtt95jbKFi6Llk9aik8bnR3tR/oQP1o3TSi+iG//+Q2RTIzCEgKkHG8BB86kxMNW6O8wku+Lmi+QFR6jA==}
+
+  '@tauri-apps/api@1.6.0':
+    resolution: {integrity: sha512-rqI++FWClU5I2UBp4HXFvl+sBWkdigBkxnpJDQUWttNyG7IZP4FwQGhTNL5EOw0vI8i6eSAJ5frLqO7n7jbJdg==}
+    engines: {node: '>= 14.6.0', npm: '>= 6.6.0', yarn: '>= 1.19.1'}
+
+  '@tauri-apps/cli-darwin-arm64@1.6.3':
+    resolution: {integrity: sha512-fQN6IYSL8bG4NvkdKE4sAGF4dF/QqqQq4hOAU+t8ksOzHJr0hUlJYfncFeJYutr/MMkdF7hYKadSb0j5EE9r0A==}
+    engines: {node: '>= 10'}
+    cpu: [arm64]
+    os: [darwin]
+
+  '@tauri-apps/cli-darwin-x64@1.6.3':
+    resolution: {integrity: sha512-1yTXZzLajKAYINJOJhZfmMhCzweHSgKQ3bEgJSn6t+1vFkOgY8Yx4oFgWcybrrWI5J1ZLZAl47+LPOY81dLcyA==}
+    engines: {node: '>= 10'}
+    cpu: [x64]
+    os: [darwin]
+
+  '@tauri-apps/cli-linux-arm-gnueabihf@1.6.3':
+    resolution: {integrity: sha512-CjTEr9r9xgjcvos09AQw8QMRPuH152B1jvlZt4PfAsyJNPFigzuwed5/SF7XAd8bFikA7zArP4UT12RdBxrx7w==}
+    engines: {node: '>= 10'}
+    cpu: [arm]
+    os: [linux]
+
+  '@tauri-apps/cli-linux-arm64-gnu@1.6.3':
+    resolution: {integrity: sha512-G9EUUS4M8M/Jz1UKZqvJmQQCKOzgTb8/0jZKvfBuGfh5AjFBu8LHvlFpwkKVm1l4951Xg4ulUp6P9Q7WRJ9XSA==}
+    engines: {node: '>= 10'}
+    cpu: [arm64]
+    os: [linux]
+
+  '@tauri-apps/cli-linux-arm64-musl@1.6.3':
+    resolution: {integrity: sha512-MuBTHJyNpZRbPVG8IZBN8+Zs7aKqwD22tkWVBcL1yOGL4zNNTJlkfL+zs5qxRnHlUsn6YAlbW/5HKocfpxVwBw==}
+    engines: {node: '>= 10'}
+    cpu: [arm64]
+    os: [linux]
+
+  '@tauri-apps/cli-linux-x64-gnu@1.6.3':
+    resolution: {integrity: sha512-Uvi7M+NK3tAjCZEY1WGel+dFlzJmqcvu3KND+nqa22762NFmOuBIZ4KJR/IQHfpEYqKFNUhJfCGnpUDfiC3Oxg==}
+    engines: {node: '>= 10'}
+    cpu: [x64]
+    os: [linux]
+
+  '@tauri-apps/cli-linux-x64-musl@1.6.3':
+    resolution: {integrity: sha512-rc6B342C0ra8VezB/OJom9j/N+9oW4VRA4qMxS2f4bHY2B/z3J9NPOe6GOILeg4v/CV62ojkLsC3/K/CeF3fqQ==}
+    engines: {node: '>= 10'}
+    cpu: [x64]
+    os: [linux]
+
+  '@tauri-apps/cli-win32-arm64-msvc@1.6.3':
+    resolution: {integrity: sha512-cSH2qOBYuYC4UVIFtrc1YsGfc5tfYrotoHrpTvRjUGu0VywvmyNk82+ZsHEnWZ2UHmu3l3lXIGRqSWveLln0xg==}
+    engines: {node: '>= 10'}
+    cpu: [arm64]
+    os: [win32]
+
+  '@tauri-apps/cli-win32-ia32-msvc@1.6.3':
+    resolution: {integrity: sha512-T8V6SJQqE4PSWmYBl0ChQVmS6AR2hXFHURH2DwAhgSGSQ6uBXgwlYFcfIeQpBQA727K2Eq8X2hGfvmoySyHMRw==}
+    engines: {node: '>= 10'}
+    cpu: [ia32]
+    os: [win32]
+
+  '@tauri-apps/cli-win32-x64-msvc@1.6.3':
+    resolution: {integrity: sha512-HUkWZ+lYHI/Gjkh2QjHD/OBDpqLVmvjZGpLK9losur1Eg974Jip6k+vsoTUxQBCBDfj30eDBct9E1FvXOspWeg==}
+    engines: {node: '>= 10'}
+    cpu: [x64]
+    os: [win32]
+
+  '@tauri-apps/cli@1.6.3':
+    resolution: {integrity: sha512-q46umd6QLRKDd4Gg6WyZBGa2fWvk0pbeUA5vFomm4uOs1/17LIciHv2iQ4UD+2Yv5H7AO8YiE1t50V0POiEGEw==}
+    engines: {node: '>= 10'}
+    hasBin: true
+
+  '@tonaljs/abc-notation@4.8.0':
+    resolution: {integrity: sha512-JggT/DW4rMxu+q1WkeACrg52is3acp9zaW4LJmCheFi3CmLa63sy7/6mgKnlScTOvcpAyTcSytu0VbQHRXyBDA==}
+
+  '@tonaljs/array@4.8.0':
+    resolution: {integrity: sha512-lWCUBRUVWtDV0kl/fjOgICRWzBYWZdJEk1h0vVzpuPaXW6Yz3JfjyKPtLbzYTkgSr1PqcjxVGNwxilz9c2NNkQ==}
+
+  '@tonaljs/chord-detect@4.8.0':
+    resolution: {integrity: sha512-rpBHS2FKitIIodWI32LszeUfpq0of+0zqnU3CBc2/2UiYoyO9PmSs8UjzupKTIX/mHxOxq0ncDheT/ItB7QdNg==}
+
+  '@tonaljs/chord-type@4.8.0':
+    resolution: {integrity: sha512-NQYvTziV5HiY+fuNWHB85ZFJgKFge3iBcmcJSDI4kguxSHqDDscM1fE+tb6q4mi6RKERtw3oeGWjV5ScL1UKWQ==}
+
+  '@tonaljs/chord@4.10.0':
+    resolution: {integrity: sha512-PyR17WYtgk0Yi1KRPeK5dVKoCCBf+LA23pRndN9RFWUkQR/zuRgmTyXpS7JRfzNqDu4GLGVCzS37QUdHRD5FvA==}
+
+  '@tonaljs/collection@4.8.0':
+    resolution: {integrity: sha512-NSnqUDqnCZajYGPH4+27y6UAflX+RrAZQdP9YNBuJoTFtdSDrqV3cJoPdr2DRpGCK3Nuzw1dU8DlGsyWwNwlmg==}
+
+  '@tonaljs/core@4.10.0':
+    resolution: {integrity: sha512-+AH7NP9iiAGil+X7NlKGlQvls/KByQmxR51d5O+y6IjHltOkVUXk74oZuxW7zF0IsKchFn8Okr0sxqFmgsQmpA==}
+
+  '@tonaljs/duration-value@4.8.0':
+    resolution: {integrity: sha512-ewWVKtYCzNkSNaFoEn6NqL5vCmHTqoN+qngoUG2Sy2ZvGCk1pwx3ckJVUkJmYrkxP4PbQASPgJi0y+0fjgVJug==}
+
+  '@tonaljs/interval@4.8.0':
+    resolution: {integrity: sha512-R+1OvqRS0lFqzmzorbL0cwqZLVRnDw2kmwNtgF17A2vqcZI9aDDH/XELPLLUcZ7ykeIu4X9t/v+yTwREj+nUrA==}
+
+  '@tonaljs/key@4.9.1':
+    resolution: {integrity: sha512-WL/8raLnrcv6qpBog0HNp16/ifleeapZjU2PVTnIJ2DhuVgqtI8ccCyZHAURFdMmwYmn1Gf1VnvUAmG7RmqHJg==}
+
+  '@tonaljs/midi@4.9.0':
+    resolution: {integrity: sha512-zi6lK2OC2EA8E1Nl011erWAZgOSlrfstJMgnrbm4/nLDegotg5ALbMnfX/s+SIfSSFcXn/Og1d8xwPeAwoaUyg==}
+
+  '@tonaljs/mode@4.8.0':
+    resolution: {integrity: sha512-hyaj2RWcnA7h6+jzc074JzE8GFFYg2FaRxXJHLBIYXXlqrLnudnSHOAfHUNRySQKEMR6h4oIerf9LW6+z9sPjQ==}
+
+  '@tonaljs/note@4.10.0':
+    resolution: {integrity: sha512-jWyxk9Dom+vsucj3dWG9z4j6WhZqbY7gkKsS14fHeo7g8qUZTVZFsr8ulpHyLPXN3EhLwHDU7CxIQ1klkPE33A==}
+
+  '@tonaljs/pcset@4.8.1':
+    resolution: {integrity: sha512-Ir+xHQHBqhSlOEeIMsPwz6A9MRdeKYajKFFwhnGLzU42HcHfe0MKyttzVO+iSIenLtiYk5TyW9ADdo6y85sJeA==}
+
+  '@tonaljs/progression@4.8.0':
+    resolution: {integrity: sha512-JS5xDox5pN3rRAIIC7ACumGmSwMpIRPvQpUePTmfQS0YMjFofzXeAjH/7WZN0328VK4vk8OAWu5N18pVxqJqQw==}
+
+  '@tonaljs/range@4.8.1':
+    resolution: {integrity: sha512-UAyHBPh1SfqOo2w/BA6Rji3Sl1V0z/ggoE9+gS5aig13qUaVM8B3p2eanEgrxsRTN+yARPSE83CiWWbVqLKzWA==}
+
+  '@tonaljs/roman-numeral@4.8.0':
+    resolution: {integrity: sha512-jktwfGXcs4qp5A0jy5pyWxgYkeGDcaldV9tiv7XnNR5yLwDm0D6S9rRlNlSo3n0wyDo3+Kh80hd3Mps+Gsf81w==}
+
+  '@tonaljs/scale-type@4.8.1':
+    resolution: {integrity: sha512-XlSCFnEmiv7olj8mQBnQOBP9l1CtKFju3BqIILvLCacc6nrWSfSOSi8Y08FujSdvnU6i2fJmK/AYqlqFNoR1rA==}
+
+  '@tonaljs/scale@4.12.0':
+    resolution: {integrity: sha512-1XxGoNqOFRgHWtpGH1Ery/AObnlnHp8+Yxe2FSE7J1BzUFej1XpJJyRvR4sOFVGr603xze+9IOXVgGTADcy/IQ==}
+
+  '@tonaljs/time-signature@4.8.0':
+    resolution: {integrity: sha512-ES5WoBC3aA5qQcVxh3GUc/Z1XAlnul/PCdlYrmTNAAJ4hgv4H5WHu15fWk7xRcCC6LZz6chfQNbSIXl9sNRdZQ==}
+
+  '@tonaljs/tonal@4.10.0':
+    resolution: {integrity: sha512-F2T9Fiy+j0MVped89kCrX1XF68mQOLUnny4pDOHrIf+OkrjtLQOzzaSOrX1tx0o72WUwQm1knz6D1d57b9X1HA==}
+
+  '@tufjs/canonical-json@2.0.0':
+    resolution: {integrity: sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==}
+    engines: {node: ^16.14.0 || >=18.0.0}
+
+  '@tufjs/models@2.0.1':
+    resolution: {integrity: sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==}
+    engines: {node: ^16.14.0 || >=18.0.0}
+
+  '@types/acorn@4.0.6':
+    resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==}
+
+  '@types/babel__core@7.20.5':
+    resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
+
+  '@types/babel__generator@7.6.4':
+    resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==}
+
+  '@types/babel__template@7.4.1':
+    resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==}
+
+  '@types/babel__traverse@7.18.3':
+    resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==}
+
+  '@types/cookie@0.6.0':
+    resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==}
+
+  '@types/debug@4.1.7':
+    resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==}
+
+  '@types/estree-jsx@1.0.5':
+    resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==}
+
+  '@types/estree@0.0.39':
+    resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==}
+
+  '@types/estree@1.0.0':
+    resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==}
+
+  '@types/estree@1.0.6':
+    resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
+
+  '@types/hast@3.0.2':
+    resolution: {integrity: sha512-B5hZHgHsXvfCoO3xgNJvBnX7N8p86TqQeGKXcokW4XXi+qY4vxxPSFYofytvVmpFxzPv7oxDQzjg5Un5m2/xiw==}
+
+  '@types/hast@3.0.4':
+    resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==}
+
+  '@types/json-schema@7.0.15':
+    resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+
+  '@types/json5@0.0.29':
+    resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
+
+  '@types/linkify-it@5.0.0':
+    resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==}
+
+  '@types/markdown-it@14.1.2':
+    resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==}
+
+  '@types/mdast@4.0.2':
+    resolution: {integrity: sha512-tYR83EignvhYO9iU3kDg8V28M0jqyh9zzp5GV+EO+AYnyUl3P5ltkTeJuTiFZQFz670FSb3EwT/6LQdX+UdKfw==}
+
+  '@types/mdast@4.0.4':
+    resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
+
+  '@types/mdurl@2.0.0':
+    resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==}
+
+  '@types/mdx@2.0.13':
+    resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==}
+
+  '@types/minimatch@3.0.5':
+    resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==}
+
+  '@types/minimist@1.2.2':
+    resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==}
+
+  '@types/ms@0.7.31':
+    resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==}
+
+  '@types/nlcst@1.0.4':
+    resolution: {integrity: sha512-ABoYdNQ/kBSsLvZAekMhIPMQ3YUZvavStpKYs7BjLLuKVmIMA0LUgZ7b54zzuWJRbHF80v1cNf4r90Vd6eMQDg==}
+
+  '@types/nlcst@2.0.3':
+    resolution: {integrity: sha512-vSYNSDe6Ix3q+6Z7ri9lyWqgGhJTmzRjZRqyq15N0Z/1/UnVsno9G/N40NBijoYx2seFDIl0+B2mgAb9mezUCA==}
+
+  '@types/node@20.16.12':
+    resolution: {integrity: sha512-LfPFB0zOeCeCNQV3i+67rcoVvoN5n0NVuR2vLG0O5ySQMgchuZlC4lgz546ZOJyDtj5KIgOxy+lacOimfqZAIA==}
+
+  '@types/node@22.7.6':
+    resolution: {integrity: sha512-/d7Rnj0/ExXDMcioS78/kf1lMzYk4BZV8MZGTBKzTGZ6/406ukkbYlIsZmMPhcR5KlkunDHQLrtAVmSq7r+mSw==}
+
+  '@types/normalize-package-data@2.4.1':
+    resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
+
+  '@types/phoenix@1.6.5':
+    resolution: {integrity: sha512-xegpDuR+z0UqG9fwHqNoy3rI7JDlvaPh2TY47Fl80oq6g+hXT+c/LEuE43X48clZ6lOfANl5WrPur9fYO1RJ/w==}
+
+  '@types/prop-types@15.7.5':
+    resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==}
+
+  '@types/react-dom@18.3.1':
+    resolution: {integrity: sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==}
+
+  '@types/react@18.3.11':
+    resolution: {integrity: sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ==}
+
+  '@types/resolve@1.17.1':
+    resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==}
+
+  '@types/trusted-types@2.0.2':
+    resolution: {integrity: sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==}
+
+  '@types/trusted-types@2.0.7':
+    resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==}
+
+  '@types/ungap__structured-clone@0.3.3':
+    resolution: {integrity: sha512-RNmhIPwoip6K/zZOv3ypksTAqaqLEXvlNSXKyrC93xMSOAHZCR7PifW6xKZCwkbbnbM9dwB9X56PPoNTlNwEqw==}
+
+  '@types/unist@2.0.11':
+    resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==}
+
+  '@types/unist@3.0.1':
+    resolution: {integrity: sha512-ue/hDUpPjC85m+PM9OQDMZr3LywT+CT6mPsQq8OJtCLiERkGRcQUFvu9XASF5XWqyZFXbf15lvb3JFJ4dRLWPg==}
+
+  '@types/unist@3.0.3':
+    resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
+
+  '@types/webmidi@2.1.0':
+    resolution: {integrity: sha512-k898MjEUSHB+6rSeCPQk/kLgie0wgWZ2t78GlWj86HbTQ+XmtbBafYg5LNjn8bVHfItEhPGZPf579Xfc6keV6w==}
+
+  '@types/ws@8.5.12':
+    resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==}
+
+  '@typescript-eslint/types@5.62.0':
+    resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+  '@typescript-eslint/typescript-estree@5.62.0':
+    resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    peerDependencies:
+      typescript: '*'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+
+  '@typescript-eslint/visitor-keys@5.62.0':
+    resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+  '@uiw/codemirror-theme-abcdef@4.23.5':
+    resolution: {integrity: sha512-1CY4Hyods01NBHChCM+gr1eMM5QyIoN7tOSnNprlTisKduynfxjuxbQW8n0G0phr7TBJGZ4OxopnOzrnjJy3+A==}
+
+  '@uiw/codemirror-theme-abyss@4.23.5':
+    resolution: {integrity: sha512-JhAt1VcQaS2uRZpHwaCvpUh18tDzm2BoI62MZQu+Ti5ws4EpF4yKVWXWVn9j9ADvodjjit1nDlvzhz7Rrhtodw==}
+
+  '@uiw/codemirror-theme-androidstudio@4.23.5':
+    resolution: {integrity: sha512-A/RaDXeDzHImy1gXB2ELz9l87fnFfl4Ou6NEiWqT7QfgUzkclu5kAxbud0nOXg5gyQ6ipfkFt3CG66PT4r91UQ==}
+
+  '@uiw/codemirror-theme-andromeda@4.23.5':
+    resolution: {integrity: sha512-yQTdoklCkcKQesrIkCem9c2FBdYWNEjcm/49g68v5/JB6EhwsomYHg+IhGpYbZOT+Ea0P16hxW5QeUHiVBMEEQ==}
+
+  '@uiw/codemirror-theme-atomone@4.23.5':
+    resolution: {integrity: sha512-gv3zKpq2Wfx+YV4LwBxzNmOjtLZgIRC0jk6gyTTIMtuv0B72S7GtyAep/mVyi5LOYEqDappWLtC3FVuTcwcvoQ==}
+
+  '@uiw/codemirror-theme-aura@4.23.5':
+    resolution: {integrity: sha512-vzKcATUVlPzytFy0nIOHfZo2dQ/anP2HC7s/s05nmEC3DOZJdSKSsPc9URfMFVqKMT2m2mqz8jkaLUSIUeZvqg==}
+
+  '@uiw/codemirror-theme-basic@4.23.5':
+    resolution: {integrity: sha512-pxjuB6cohggQqWW2o59Y94r1Bg+Pwqb82T5yciquS/505JmAEkn0X6cn0g5pfIn4j7brpSiDGBp6AnuKxwIwuA==}
+
+  '@uiw/codemirror-theme-bbedit@4.23.5':
+    resolution: {integrity: sha512-oZzrUaXbDGbKgugpXitgoZq9lCZ2AeFdRE6KwYy+RDWLvroF8b5Fk54m+IXEc1V8j1cIosdZwYKtU62g4Fw+LQ==}
+
+  '@uiw/codemirror-theme-bespin@4.23.5':
+    resolution: {integrity: sha512-O665jlQSVKQtz7cyBp0qTwGrrfs77vhMt5T5vCihTI5CJ4RSleWpKHhNDxMR79qkudNVr+H4eRDaWTt019PWPw==}
+
+  '@uiw/codemirror-theme-console@4.23.5':
+    resolution: {integrity: sha512-D0EBrK1ylHH1efIg+EvCidCYtzdLgxKqH0g9CT+0y2Lf637G0m+JCwRQCAYY4d9BFTomhhJxzZTY5gO7eqTlkg==}
+
+  '@uiw/codemirror-theme-copilot@4.23.5':
+    resolution: {integrity: sha512-uauCGZ6HCBf1mcLGrB4lDsLiJ2kGgYIjceFlR6kF8xDJ601wQl+zRaMhc1Kzr9BhDUUoMnWce2uNNu7DU+B09A==}
+
+  '@uiw/codemirror-theme-darcula@4.23.5':
+    resolution: {integrity: sha512-du5Tw/40oK+yXlZbF082BHX5JSzEwQ7r+UI9GV5R0APRDB3c0jsGL5JwgSAU2jZXFCN1VcBkf517+syKjBL9Pg==}
+
+  '@uiw/codemirror-theme-dracula@4.23.5':
+    resolution: {integrity: sha512-VdIVj9jZn0d97jr3/Az5PNjbqTDfw+eshuqYzXR5VltQO7XAV+BuyXEMpHhlTHXyq2FZuFdX1wIBnRbSR91bnw==}
+
+  '@uiw/codemirror-theme-duotone@4.23.5':
+    resolution: {integrity: sha512-2XfE0zwWtH+j47xtY6iEuxFyyc1be1LK6+NnHjT20hfoz5HGMwk0Eg4dv1rQ/EC5bBN9eflrnZZUO7q1rbegiw==}
+
+  '@uiw/codemirror-theme-eclipse@4.23.5':
+    resolution: {integrity: sha512-WsfcdDjQQCpd42KUJcp/2r5UjTvXetR5V6Zp12ZJliL1gpjtHdZ6ZJxSwQhga6pfEBn2ITz5u5lZgBv/zXgtqg==}
+
+  '@uiw/codemirror-theme-github@4.23.5':
+    resolution: {integrity: sha512-gR5rgWUaRoLRavzA6w+/dKE6KMDQdHF82xpnLYQvOwE/1agNS0asowdZUodMXbvOoNLIgcopLm3hXdzzVouuaw==}
+
+  '@uiw/codemirror-theme-gruvbox-dark@4.23.5':
+    resolution: {integrity: sha512-TgGDImqOoujKt7VIDy9bBlxUaOSMaBlw2bK5sgqCLhc5gJPIec8kHpVmoIISi+cI+Ft/uvACX3Lcqhn4ahmAzg==}
+
+  '@uiw/codemirror-theme-kimbie@4.23.5':
+    resolution: {integrity: sha512-vC3kr0Lr5AhN2J4KhMYHObRovl3aTBrDMC44JSLzgwU+EBceNPEMrFKfY0pnDgyCXof95R8k4+cfH0WjfQFvtA==}
+
+  '@uiw/codemirror-theme-material@4.23.5':
+    resolution: {integrity: sha512-SEr55l443ws/2tuVy1AzuqjimzSWX1Vgn+8cvZMTLNVUgCFIX9Pq2dpGaQ+D9S/HhGdOXcd9GEZn9Rq2qBu8Jg==}
+
+  '@uiw/codemirror-theme-monokai-dimmed@4.23.5':
+    resolution: {integrity: sha512-QctXv2jRtysuEAhKOhuQGlCX1sH+CdSuZ7VbZ63boNQb+0mAwpwPTeUncegxB8V6ffJhISaae9ewBtIPBXyN7A==}
+
+  '@uiw/codemirror-theme-monokai@4.23.5':
+    resolution: {integrity: sha512-3I7pmMKkyq7fXgAYmHXH2Q+Ts/1ir2UyT+TcW+7H3czINHEGBnSZN4KSAfh1BDQiYJwKKjq7mm/aHln4oH5+Zw==}
+
+  '@uiw/codemirror-theme-noctis-lilac@4.23.5':
+    resolution: {integrity: sha512-ZBG3FN4jXxUczv4Tlqg+6sixIs2NQSyWmczT7k5JorMIeZGV0pSeH9/HKwdGlHq5PFNDdBbvsPEZeGnLDLHVzQ==}
+
+  '@uiw/codemirror-theme-nord@4.23.5':
+    resolution: {integrity: sha512-wOoITSvuDxK1UNar/2O+p2CjTfijTALIEuuzE9JTQFoNrLFY5lmxajLcRlybHAqHX53FdALCSIpyPMcIO+MQqA==}
+
+  '@uiw/codemirror-theme-okaidia@4.23.5':
+    resolution: {integrity: sha512-0O5f7xDlBU8QInNzZKmhjoia0eyEqWcPVF2EF+djGue4L8dyr9nyWpkUZFHiXdMA/CWr5Mdv8uepv7Onj4lIew==}
+
+  '@uiw/codemirror-theme-quietlight@4.23.5':
+    resolution: {integrity: sha512-S9xk7fCdLX2rEOEdU3u+hH8zX5k3Qedz7AD38FPh4fQc/+rdG3YbjyptnIewQgdTzwydXrL0Ohw5I5shIdu22w==}
+
+  '@uiw/codemirror-theme-red@4.23.5':
+    resolution: {integrity: sha512-6jMoAoFSaCbeKno6Yrd5R36N9Q+9WzMqyFXksOYF213pa4HnWoDT7BtzMN5zNTrqVKHTsNp06YzLWorMgfANKw==}
+
+  '@uiw/codemirror-theme-solarized@4.23.5':
+    resolution: {integrity: sha512-YT/WmwF7Pnq3VpCk+JTnBi47NWhpNaplJokT5+9Cb3wqsnXqI6XEzeaCgDwGwaO0Nvw4DqEaOOQrNL9agmsJEw==}
+
+  '@uiw/codemirror-theme-sublime@4.23.5':
+    resolution: {integrity: sha512-8bUYRexVuYf1ReCAxkF9rP6CFhpInIuF4MVllvaZEWDfQR7Oauu9VEcuu9swm9zuy7NYYw1LIIQhzYOKufmVww==}
+
+  '@uiw/codemirror-theme-tokyo-night-day@4.23.5':
+    resolution: {integrity: sha512-DzOflLm6KlZ1yOkEZdiFzbwUl/tdf3HMJw1LU/vFNWIIm53jbXPfUl3IuNppkPpB3np20Wvw37kTs3ehgby2dw==}
+
+  '@uiw/codemirror-theme-tokyo-night-storm@4.23.5':
+    resolution: {integrity: sha512-qV00W97jZoy+Lv+PFGbTH9NdEtliO9Ubo/aqWtqvRUJuFxlS/7qAnCRiVpeHqHdE/a3u9Hryni8PQXwuMFroGA==}
+
+  '@uiw/codemirror-theme-tokyo-night@4.23.5':
+    resolution: {integrity: sha512-vevM3Z8ry5Ifo6IkuVm3oZzyOw1wSKI7lTjNAj7Rw7E93b+LB9JttTGKMmGV9b5kmet72MGilBP/Zs2pGdcKBw==}
+
+  '@uiw/codemirror-theme-tomorrow-night-blue@4.23.5':
+    resolution: {integrity: sha512-USQtGxxvQNbSDAgk8h9mkhX8dKrUXCcr2lJuIIT0akIiZYEZ1I0m6zxhRpMuZwiNHiqiOwzeQltB92StkbkPCg==}
+
+  '@uiw/codemirror-theme-vscode@4.23.5':
+    resolution: {integrity: sha512-tNMROZhVHPFAnx+e/SAVctU/aJyLXisI7jekmyVH3Gcl2wYIcAMgrDGfwY5xhHbDu18lP9w2kLIg3i9IzZsDeQ==}
+
+  '@uiw/codemirror-theme-white@4.23.5':
+    resolution: {integrity: sha512-+mS5YAHjs9pr3nG8SpTqQTfVYGghWGFp6jGtjW8p/GWVUvj104pFyuYHH4Z+OV328qB5DWZLZ34Eaj5iMbfwlw==}
+
+  '@uiw/codemirror-theme-xcode@4.23.5':
+    resolution: {integrity: sha512-8Ojpf+B+CjSpGM2hwDjR5e4Y5j8vkk18j8e7Drxa7vP+K4yB1RruTba8saobLX61HaNB/L8RcZ/BFTBcOEgS0Q==}
+
+  '@uiw/codemirror-themes-all@4.23.5':
+    resolution: {integrity: sha512-SsGLiK6/222tct62VGneUhCeupeoXPSEAc2kPeb79V0QexqZU+xNiGulYjHr7OqtEAhFxBW3CxZC89CLPXbBdA==}
+
+  '@uiw/codemirror-themes@4.23.5':
+    resolution: {integrity: sha512-yWUTpaVroxIxjKASQAmKaYy+ZYtF+YB6d8sVmSRK2TVD13M+EWvVT2jBGFLqR1UVg7G0W/McAy8xdeTg+a3slg==}
+    peerDependencies:
+      '@codemirror/language': '>=6.0.0'
+      '@codemirror/state': '>=6.0.0'
+      '@codemirror/view': '>=6.0.0'
+
+  '@ungap/structured-clone@1.2.0':
+    resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
+
+  '@vite-pwa/astro@0.2.0':
+    resolution: {integrity: sha512-1MBNbRo9I9fp9sUSoaQfI/xHVDRKRoUsWETDJMVoKoctZYfm4fZgb7EN76WJdejW/vup+3+uoFlDMCnca+vZzA==}
+    peerDependencies:
+      astro: ^1.6.0 || ^2.0.0 || ^3.0.0 || ^4.0.0
+      vite-plugin-pwa: '>=0.17.3 <1'
+
+  '@vitejs/plugin-react@4.3.2':
+    resolution: {integrity: sha512-hieu+o05v4glEBucTcKMK3dlES0OeJlD9YVOAPraVMOInBCwzumaIFiUjr4bHK7NPgnAHgiskUoceKercrN8vg==}
+    engines: {node: ^14.18.0 || >=16.0.0}
+    peerDependencies:
+      vite: ^4.2.0 || ^5.0.0
+
+  '@vitest/expect@2.1.3':
+    resolution: {integrity: sha512-SNBoPubeCJhZ48agjXruCI57DvxcsivVDdWz+SSsmjTT4QN/DfHk3zB/xKsJqMs26bLZ/pNRLnCf0j679i0uWQ==}
+
+  '@vitest/mocker@2.1.3':
+    resolution: {integrity: sha512-eSpdY/eJDuOvuTA3ASzCjdithHa+GIF1L4PqtEELl6Qa3XafdMLBpBlZCIUCX2J+Q6sNmjmxtosAG62fK4BlqQ==}
+    peerDependencies:
+      '@vitest/spy': 2.1.3
+      msw: ^2.3.5
+      vite: ^5.0.0
+    peerDependenciesMeta:
+      msw:
+        optional: true
+      vite:
+        optional: true
+
+  '@vitest/pretty-format@2.1.3':
+    resolution: {integrity: sha512-XH1XdtoLZCpqV59KRbPrIhFCOO0hErxrQCMcvnQete3Vibb9UeIOX02uFPfVn3Z9ZXsq78etlfyhnkmIZSzIwQ==}
+
+  '@vitest/runner@2.1.3':
+    resolution: {integrity: sha512-JGzpWqmFJ4fq5ZKHtVO3Xuy1iF2rHGV4d/pdzgkYHm1+gOzNZtqjvyiaDGJytRyMU54qkxpNzCx+PErzJ1/JqQ==}
+
+  '@vitest/snapshot@2.1.3':
+    resolution: {integrity: sha512-qWC2mWc7VAXmjAkEKxrScWHWFyCQx/cmiZtuGqMi+WwqQJ2iURsVY4ZfAK6dVo6K2smKRU6l3BPwqEBvhnpQGg==}
+
+  '@vitest/spy@2.1.3':
+    resolution: {integrity: sha512-Nb2UzbcUswzeSP7JksMDaqsI43Sj5+Kry6ry6jQJT4b5gAK+NS9NED6mDb8FlMRCX8m5guaHCDZmqYMMWRy5nQ==}
+
+  '@vitest/ui@2.1.3':
+    resolution: {integrity: sha512-2XwTrHVJw3t9NYES26LQUYy51ZB8W4bRPgqUH2Eyda3kIuOlYw1ZdPNU22qcVlUVx4WKgECFQOSXuopsczuVjQ==}
+    peerDependencies:
+      vitest: 2.1.3
+
+  '@vitest/utils@2.1.3':
+    resolution: {integrity: sha512-xpiVfDSg1RrYT0tX6czgerkpcKFmFOF/gCr30+Mve5V2kewCy4Prn1/NDMSRwaSmT7PRaOF83wu+bEtsY1wrvA==}
+
+  '@yarnpkg/lockfile@1.1.0':
+    resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==}
+
+  '@yarnpkg/parsers@3.0.0-rc.46':
+    resolution: {integrity: sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==}
+    engines: {node: '>=14.15.0'}
+
+  '@zkochan/js-yaml@0.0.6':
+    resolution: {integrity: sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==}
+    hasBin: true
+
+  JSONStream@1.3.5:
+    resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
+    hasBin: true
+
+  abbrev@2.0.0:
+    resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==}
+    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+  acorn-jsx@5.3.2:
+    resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+    peerDependencies:
+      acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+
+  acorn@8.13.0:
+    resolution: {integrity: sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==}
+    engines: {node: '>=0.4.0'}
+    hasBin: true
+
+  add-stream@1.0.0:
+    resolution: {integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==}
+
+  agent-base@6.0.2:
+    resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
+    engines: {node: '>= 6.0.0'}
+
+  agent-base@7.1.1:
+    resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==}
+    engines: {node: '>= 14'}
+
+  aggregate-error@3.1.0:
+    resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==}
+    engines: {node: '>=8'}
+
+  ajv@6.12.6:
+    resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+
+  ajv@8.17.1:
+    resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
+
+  algoliasearch@4.22.0:
+    resolution: {integrity: sha512-gfceltjkwh7PxXwtkS8KVvdfK+TSNQAWUeNSxf4dA29qW5tf2EGwa8jkJujlT9jLm17cixMVoGNc+GJFO1Mxhg==}
+
+  ansi-align@3.0.1:
+    resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==}
+
+  ansi-colors@4.1.3:
+    resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
+    engines: {node: '>=6'}
+
+  ansi-escape-sequences@4.1.0:
+    resolution: {integrity: sha512-dzW9kHxH011uBsidTXd14JXgzye/YLb2LzeKZ4bsgl/Knwx8AtbSFkkGxagdNOoh0DlqHCmfiEjWKBaqjOanVw==}
+    engines: {node: '>=8.0.0'}
+
+  ansi-escapes@4.3.2:
+    resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
+    engines: {node: '>=8'}
+
+  ansi-regex@3.0.1:
+    resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==}
+    engines: {node: '>=4'}
+
+  ansi-regex@5.0.1:
+    resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+    engines: {node: '>=8'}
+
+  ansi-regex@6.1.0:
+    resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
+    engines: {node: '>=12'}
+
+  ansi-styles@3.2.1:
+    resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
+    engines: {node: '>=4'}
+
+  ansi-styles@4.3.0:
+    resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+    engines: {node: '>=8'}
+
+  ansi-styles@5.2.0:
+    resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
+    engines: {node: '>=10'}
+
+  ansi-styles@6.2.1:
+    resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
+    engines: {node: '>=12'}
+
+  any-promise@1.3.0:
+    resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
+
+  anymatch@3.1.3:
+    resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+    engines: {node: '>= 8'}
+
+  app-module-path@2.2.0:
+    resolution: {integrity: sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==}
+
+  aproba@2.0.0:
+    resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==}
+
+  arg@5.0.2:
+    resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
+
+  argparse@1.0.10:
+    resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
+
+  argparse@2.0.1:
+    resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+  aria-query@5.3.2:
+    resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
+    engines: {node: '>= 0.4'}
+
+  array-back@1.0.4:
+    resolution: {integrity: sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw==}
+    engines: {node: '>=0.12.0'}
+
+  array-back@2.0.0:
+    resolution: {integrity: sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==}
+    engines: {node: '>=4'}
+
+  array-back@3.1.0:
+    resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==}
+    engines: {node: '>=6'}
+
+  array-back@4.0.2:
+    resolution: {integrity: sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==}
+    engines: {node: '>=8'}
+
+  array-back@5.0.0:
+    resolution: {integrity: sha512-kgVWwJReZWmVuWOQKEOohXKJX+nD02JAZ54D1RRWlv8L0NebauKAaFxACKzB74RTclt1+WNz5KHaLRDAPZbDEw==}
+    engines: {node: '>=10'}
+
+  array-back@6.2.2:
+    resolution: {integrity: sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==}
+    engines: {node: '>=12.17'}
+
+  array-buffer-byte-length@1.0.0:
+    resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==}
+
+  array-buffer-byte-length@1.0.1:
+    resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==}
+    engines: {node: '>= 0.4'}
+
+  array-differ@3.0.0:
+    resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==}
+    engines: {node: '>=8'}
+
+  array-ify@1.0.0:
+    resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==}
+
+  array-includes@3.1.8:
+    resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==}
+    engines: {node: '>= 0.4'}
+
+  array-iterate@2.0.1:
+    resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==}
+
+  array-union@2.1.0:
+    resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
+    engines: {node: '>=8'}
+
+  array.prototype.findlastindex@1.2.5:
+    resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==}
+    engines: {node: '>= 0.4'}
+
+  array.prototype.flat@1.3.2:
+    resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==}
+    engines: {node: '>= 0.4'}
+
+  array.prototype.flatmap@1.3.2:
+    resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==}
+    engines: {node: '>= 0.4'}
+
+  arraybuffer.prototype.slice@1.0.2:
+    resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==}
+    engines: {node: '>= 0.4'}
+
+  arraybuffer.prototype.slice@1.0.3:
+    resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==}
+    engines: {node: '>= 0.4'}
+
+  arrify@1.0.1:
+    resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
+    engines: {node: '>=0.10.0'}
+
+  arrify@2.0.1:
+    resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==}
+    engines: {node: '>=8'}
+
+  assertion-error@2.0.1:
+    resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
+    engines: {node: '>=12'}
+
+  ast-module-types@5.0.0:
+    resolution: {integrity: sha512-JvqziE0Wc0rXQfma0HZC/aY7URXHFuZV84fJRtP8u+lhp0JYCNd5wJzVXP45t0PH0Mej3ynlzvdyITYIu0G4LQ==}
+    engines: {node: '>=14'}
+
+  astring@1.9.0:
+    resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==}
+    hasBin: true
+
+  astro@4.16.6:
+    resolution: {integrity: sha512-LMMbjr+4aN26MOyJzTdjM+Y+srpAIkx7IX9IcdF3eHQLGr8PgkioZp+VQExRfioDIyA2HY6ottVg3QccTzJqYA==}
+    engines: {node: ^18.17.1 || ^20.3.0 || >=21.0.0, npm: '>=9.6.5', pnpm: '>=7.1.0'}
+    hasBin: true
+
+  async@3.2.4:
+    resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==}
+
+  async@3.2.6:
+    resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
+
+  asynckit@0.4.0:
+    resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+
+  at-least-node@1.0.0:
+    resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==}
+    engines: {node: '>= 4.0.0'}
+
+  automation-events@5.0.0:
+    resolution: {integrity: sha512-SkYa2YBwgRUJNsR5v6GxeJwP5IGnYtOMW37coplTOWMUpDYYrk5j8gGOhYa765rchRln/HssFzMAck/2P6zTFw==}
+    engines: {node: '>=14.15.4'}
+
+  autoprefixer@10.4.20:
+    resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==}
+    engines: {node: ^10 || ^12 || >=14}
+    hasBin: true
+    peerDependencies:
+      postcss: ^8.1.0
+
+  available-typed-arrays@1.0.5:
+    resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==}
+    engines: {node: '>= 0.4'}
+
+  available-typed-arrays@1.0.7:
+    resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
+    engines: {node: '>= 0.4'}
+
+  axios@1.6.3:
+    resolution: {integrity: sha512-fWyNdeawGam70jXSVlKl+SUNVcL6j6W79CuSIPfi6HnDUmSCH6gyUys/HrqHeA/wU0Az41rRgean494d0Jb+ww==}
+
+  axobject-query@4.1.0:
+    resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
+    engines: {node: '>= 0.4'}
+
+  babel-plugin-add-module-exports@0.2.1:
+    resolution: {integrity: sha512-3AN/9V/rKuv90NG65m4tTHsI04XrCKsWbztIcW7a8H5iIN7WlvWucRtVV0V/rT4QvtA11n5Vmp20fLwfMWqp6g==}
+
+  babel-plugin-polyfill-corejs2@0.4.11:
+    resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==}
+    peerDependencies:
+      '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+
+  babel-plugin-polyfill-corejs3@0.10.6:
+    resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==}
+    peerDependencies:
+      '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+
+  babel-plugin-polyfill-regenerator@0.6.2:
+    resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==}
+    peerDependencies:
+      '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+
+  bail@2.0.2:
+    resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
+
+  balanced-match@1.0.2:
+    resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+  base-64@1.0.0:
+    resolution: {integrity: sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==}
+
+  base64-js@1.5.1:
+    resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+  before-after-hook@2.2.3:
+    resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==}
+
+  bin-links@4.0.4:
+    resolution: {integrity: sha512-cMtq4W5ZsEwcutJrVId+a/tjt8GSbS+h0oNkdl6+6rBuEv8Ot33Bevj5KPm40t309zuhVic8NjpuL42QCiJWWA==}
+    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+  binary-extensions@2.2.0:
+    resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
+    engines: {node: '>=8'}
+
+  bl@4.1.0:
+    resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
+
+  bluebird@3.7.2:
+    resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
+
+  boxen@8.0.1:
+    resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==}
+    engines: {node: '>=18'}
+
+  brace-expansion@1.1.11:
+    resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+
+  brace-expansion@2.0.1:
+    resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+
+  braces@3.0.2:
+    resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
+    engines: {node: '>=8'}
+
+  braces@3.0.3:
+    resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+    engines: {node: '>=8'}
+
+  browserslist@4.24.0:
+    resolution: {integrity: sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==}
+    engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+    hasBin: true
+
+  buffer-alloc-unsafe@1.1.0:
+    resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==}
+
+  buffer-alloc@1.2.0:
+    resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==}
+
+  buffer-fill@1.0.0:
+    resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==}
+
+  buffer-from@1.1.2:
+    resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+  buffer@5.7.1:
+    resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
+
+  builtin-modules@3.3.0:
+    resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
+    engines: {node: '>=6'}
+
+  builtins@5.0.1:
+    resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==}
+
+  byte-size@8.1.1:
+    resolution: {integrity: sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg==}
+    engines: {node: '>=12.17'}
+
+  cac@6.7.14:
+    resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
+    engines: {node: '>=8'}
+
+  cacache@18.0.4:
+    resolution: {integrity: sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==}
+    engines: {node: ^16.14.0 || >=18.0.0}
+
+  cache-point@2.0.0:
+    resolution: {integrity: sha512-4gkeHlFpSKgm3vm2gJN5sPqfmijYRFYCQ6tv5cLw0xVmT6r1z1vd4FNnpuOREco3cBs1G709sZ72LdgddKvL5w==}
+    engines: {node: '>=8'}
+
+  call-bind@1.0.2:
+    resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
+
+  call-bind@1.0.5:
+    resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==}
+
+  call-bind@1.0.7:
+    resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==}
+    engines: {node: '>= 0.4'}
+
+  callsites@3.1.0:
+    resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+    engines: {node: '>=6'}
+
+  camelcase-css@2.0.1:
+    resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
+    engines: {node: '>= 6'}
+
+  camelcase-keys@6.2.2:
+    resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==}
+    engines: {node: '>=8'}
+
+  camelcase@5.3.1:
+    resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
+    engines: {node: '>=6'}
+
+  camelcase@8.0.0:
+    resolution: {integrity: sha512-8WB3Jcas3swSvjIeA2yvCJ+Miyz5l1ZmB6HFb9R1317dt9LCQoswg/BGrmAmkWVEszSrrg4RwmO46qIm2OEnSA==}
+    engines: {node: '>=16'}
+
+  caniuse-lite@1.0.30001669:
+    resolution: {integrity: sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==}
+
+  catharsis@0.9.0:
+    resolution: {integrity: sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==}
+    engines: {node: '>= 10'}
+
+  ccount@2.0.1:
+    resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
+
+  chai@5.1.1:
+    resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==}
+    engines: {node: '>=12'}
+
+  chalk@2.4.2:
+    resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
+    engines: {node: '>=4'}
+
+  chalk@4.1.0:
+    resolution: {integrity: sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==}
+    engines: {node: '>=10'}
+
+  chalk@4.1.2:
+    resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+    engines: {node: '>=10'}
+
+  chalk@5.3.0:
+    resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
+    engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+
+  character-entities-html4@2.1.0:
+    resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
+
+  character-entities-legacy@3.0.0:
+    resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
+
+  character-entities@2.0.2:
+    resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
+
+  character-reference-invalid@2.0.1:
+    resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==}
+
+  chardet@0.7.0:
+    resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
+
+  check-error@2.1.1:
+    resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==}
+    engines: {node: '>= 16'}
+
+  chokidar@3.5.3:
+    resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+    engines: {node: '>= 8.10.0'}
+
+  chord-voicings@0.0.1:
+    resolution: {integrity: sha512-SutgB/4ynkkuiK6qdQ/k3QvCFcH0Vj8Ch4t6LbRyRQbVzP/TOztiCk3kvXd516UZ6fqk7ijDRELEFcKN+6V8sA==}
+
+  chownr@1.1.4:
+    resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
+
+  chownr@2.0.0:
+    resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
+    engines: {node: '>=10'}
+
+  ci-info@3.9.0:
+    resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
+    engines: {node: '>=8'}
+
+  ci-info@4.0.0:
+    resolution: {integrity: sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==}
+    engines: {node: '>=8'}
+
+  claviature@0.1.0:
+    resolution: {integrity: sha512-Ai12axNwQ7x/F9QAj64RYKsgvi5Y33+X3GUSKAC/9s/adEws8TSSc0efeiqhKNGKBo6rT/c+CSCwSXzXxwxZzQ==}
+
+  clean-stack@2.2.0:
+    resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
+    engines: {node: '>=6'}
+
+  cli-boxes@3.0.0:
+    resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==}
+    engines: {node: '>=10'}
+
+  cli-cursor@3.1.0:
+    resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
+    engines: {node: '>=8'}
+
+  cli-cursor@5.0.0:
+    resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==}
+    engines: {node: '>=18'}
+
+  cli-spinners@2.6.1:
+    resolution: {integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==}
+    engines: {node: '>=6'}
+
+  cli-spinners@2.9.1:
+    resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==}
+    engines: {node: '>=6'}
+
+  cli-spinners@2.9.2:
+    resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
+    engines: {node: '>=6'}
+
+  cli-width@3.0.0:
+    resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==}
+    engines: {node: '>= 10'}
+
+  client-only@0.0.1:
+    resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
+
+  cliui@6.0.0:
+    resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==}
+
+  cliui@7.0.4:
+    resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+
+  cliui@8.0.1:
+    resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
+    engines: {node: '>=12'}
+
+  clone-buffer@1.0.0:
+    resolution: {integrity: sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==}
+    engines: {node: '>= 0.10'}
+
+  clone-deep@4.0.1:
+    resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==}
+    engines: {node: '>=6'}
+
+  clone-stats@1.0.0:
+    resolution: {integrity: sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==}
+
+  clone@1.0.4:
+    resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
+    engines: {node: '>=0.8'}
+
+  clone@2.1.2:
+    resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==}
+    engines: {node: '>=0.8'}
+
+  cloneable-readable@1.1.3:
+    resolution: {integrity: sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==}
+
+  clsx@2.1.1:
+    resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
+    engines: {node: '>=6'}
+
+  cmd-shim@6.0.3:
+    resolution: {integrity: sha512-FMabTRlc5t5zjdenF6mS0MBeFZm0XqHqeOkcskKFb/LYCcRQ5fVgLOHVc4Lq9CqABd9zhjwPjMBCJvMCziSVtA==}
+    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+  collapse-white-space@2.1.0:
+    resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==}
+
+  collect-all@1.0.4:
+    resolution: {integrity: sha512-RKZhRwJtJEP5FWul+gkSMEnaK6H3AGPTTWOiRimCcs+rc/OmQE3Yhy1Q7A7KsdkG3ZXVdZq68Y6ONSdvkeEcKA==}
+    engines: {node: '>=0.10.0'}
+
+  color-convert@1.9.3:
+    resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
+
+  color-convert@2.0.1:
+    resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+    engines: {node: '>=7.0.0'}
+
+  color-name@1.1.3:
+    resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
+
+  color-name@1.1.4:
+    resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+  color-string@1.9.1:
+    resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
+
+  color-support@1.1.3:
+    resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==}
+    hasBin: true
+
+  color@4.2.3:
+    resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==}
+    engines: {node: '>=12.5.0'}
+
+  columnify@1.6.0:
+    resolution: {integrity: sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==}
+    engines: {node: '>=8.0.0'}
+
+  combined-stream@1.0.8:
+    resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+    engines: {node: '>= 0.8'}
+
+  comlink@4.3.1:
+    resolution: {integrity: sha512-+YbhUdNrpBZggBAHWcgQMLPLH1KDF3wJpeqrCKieWQ8RL7atmgsgTQko1XEBK6PsecfopWNntopJ+ByYG1lRaA==}
+
+  comma-separated-tokens@2.0.3:
+    resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
+
+  command-line-args@5.2.1:
+    resolution: {integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==}
+    engines: {node: '>=4.0.0'}
+
+  command-line-tool@0.8.0:
+    resolution: {integrity: sha512-Xw18HVx/QzQV3Sc5k1vy3kgtOeGmsKIqwtFFoyjI4bbcpSgnw2CWVULvtakyw4s6fhyAdI6soQQhXc2OzJy62g==}
+    engines: {node: '>=4.0.0'}
+
+  command-line-usage@4.1.0:
+    resolution: {integrity: sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==}
+    engines: {node: '>=4.0.0'}
+
+  commander@10.0.1:
+    resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
+    engines: {node: '>=14'}
+
+  commander@2.20.3:
+    resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+  commander@4.1.1:
+    resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
+    engines: {node: '>= 6'}
+
+  common-ancestor-path@1.0.1:
+    resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==}
+
+  common-sequence@2.0.2:
+    resolution: {integrity: sha512-jAg09gkdkrDO9EWTdXfv80WWH3yeZl5oT69fGfedBNS9pXUKYInVJ1bJ+/ht2+Moeei48TmSbQDYMc8EOx9G0g==}
+    engines: {node: '>=8'}
+
+  common-tags@1.8.2:
+    resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==}
+    engines: {node: '>=4.0.0'}
+
+  compare-func@2.0.0:
+    resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==}
+
+  concat-map@0.0.1:
+    resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+  concat-stream@2.0.0:
+    resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==}
+    engines: {'0': node >= 6.0}
+
+  config-master@3.1.0:
+    resolution: {integrity: sha512-n7LBL1zBzYdTpF1mx5DNcZnZn05CWIdsdvtPL4MosvqbBUK3Rq6VWEtGUuF3Y0s9/CIhMejezqlSkP6TnCJ/9g==}
+
+  console-control-strings@1.1.0:
+    resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==}
+
+  conventional-changelog-angular@7.0.0:
+    resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==}
+    engines: {node: '>=16'}
+
+  conventional-changelog-core@5.0.1:
+    resolution: {integrity: sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A==}
+    engines: {node: '>=14'}
+
+  conventional-changelog-preset-loader@3.0.0:
+    resolution: {integrity: sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA==}
+    engines: {node: '>=14'}
+
+  conventional-changelog-writer@6.0.1:
+    resolution: {integrity: sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ==}
+    engines: {node: '>=14'}
+    hasBin: true
+
+  conventional-commits-filter@3.0.0:
+    resolution: {integrity: sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q==}
+    engines: {node: '>=14'}
+
+  conventional-commits-parser@4.0.0:
+    resolution: {integrity: sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==}
+    engines: {node: '>=14'}
+    hasBin: true
+
+  conventional-recommended-bump@7.0.1:
+    resolution: {integrity: sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA==}
+    engines: {node: '>=14'}
+    hasBin: true
+
+  convert-source-map@2.0.0:
+    resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
+  cookie@0.7.2:
+    resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
+    engines: {node: '>= 0.6'}
+
+  core-js-compat@3.38.1:
+    resolution: {integrity: sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==}
+
+  core-util-is@1.0.3:
+    resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
+
+  cosmiconfig@8.3.6:
+    resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==}
+    engines: {node: '>=14'}
+    peerDependencies:
+      typescript: '>=4.9.5'
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+
+  cowsay@1.6.0:
+    resolution: {integrity: sha512-8C4H1jdrgNusTQr3Yu4SCm+ZKsAlDFbpa0KS0Z3im8ueag+9pGOf3CrioruvmeaW/A5oqg9L0ar6qeftAh03jw==}
+    engines: {node: '>= 4'}
+    hasBin: true
+
+  crelt@1.0.5:
+    resolution: {integrity: sha512-+BO9wPPi+DWTDcNYhr/W90myha8ptzftZT+LwcmUbbok0rcP/fequmFYCw8NMoH7pkAZQzU78b3kYrlua5a9eA==}
+
+  crelt@1.0.6:
+    resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==}
+
+  cross-spawn@7.0.3:
+    resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
+    engines: {node: '>= 8'}
+
+  crypto-random-string@2.0.0:
+    resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==}
+    engines: {node: '>=8'}
+
+  cssesc@3.0.0:
+    resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
+    engines: {node: '>=4'}
+    hasBin: true
+
+  csstype@3.1.1:
+    resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==}
+
+  csv-generate@4.4.1:
+    resolution: {integrity: sha512-O/einO0v4zPmXaOV+sYqGa02VkST4GP5GLpWBNHEouIU7pF3kpGf3D0kCCvX82ydIY4EKkOK+R8b1BYsRXravg==}
+
+  csv-parse@5.5.6:
+    resolution: {integrity: sha512-uNpm30m/AGSkLxxy7d9yRXpJQFrZzVWLFBkS+6ngPcZkw/5k3L/jjFuj7tVnEpRn+QgmiXr21nDlhCiUK4ij2A==}
+
+  csv-stringify@6.5.1:
+    resolution: {integrity: sha512-+9lpZfwpLntpTIEpFbwQyWuW/hmI/eHuJZD1XzeZpfZTqkf1fyvBbBLXTJJMsBuuS11uTShMqPwzx4A6ffXgRQ==}
+
+  csv@6.3.10:
+    resolution: {integrity: sha512-5NYZG4AN2ZUthmNxIudgBEdMPUnbQHu9V4QTzBPqQzUP3KQsFiJo+8HQ0+oVxj1PomIT1/f67VI1QH/hsrZLKA==}
+    engines: {node: '>= 0.1.90'}
+
+  dargs@7.0.0:
+    resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==}
+    engines: {node: '>=8'}
+
+  data-uri-to-buffer@4.0.1:
+    resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==}
+    engines: {node: '>= 12'}
+
+  data-view-buffer@1.0.1:
+    resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==}
+    engines: {node: '>= 0.4'}
+
+  data-view-byte-length@1.0.1:
+    resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==}
+    engines: {node: '>= 0.4'}
+
+  data-view-byte-offset@1.0.0:
+    resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==}
+    engines: {node: '>= 0.4'}
+
+  date-fns@3.6.0:
+    resolution: {integrity: sha512-fRHTG8g/Gif+kSh50gaGEdToemgfj74aRX3swtiouboip5JDLAyDE9F11nHMIcvOaXeOC6D7SpNhi7uFyB7Uww==}
+
+  dateformat@3.0.3:
+    resolution: {integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==}
+
+  dct@0.1.0:
+    resolution: {integrity: sha512-/uUtEniuMq1aUxvLAoDtAduyl12oM1zhA/le2f83UFN/9+4KDHXFB6znEfoj5SDDLiTpUTr26NpxC7t8IFOYhQ==}
+    engines: {node: '>=0.12.0'}
+
+  debug@2.6.9:
+    resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
+    peerDependencies:
+      supports-color: '*'
+    peerDependenciesMeta:
+      supports-color:
+        optional: true
+
+  debug@3.2.7:
+    resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
+    peerDependencies:
+      supports-color: '*'
+    peerDependenciesMeta:
+      supports-color:
+        optional: true
+
+  debug@4.3.7:
+    resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
+    engines: {node: '>=6.0'}
+    peerDependencies:
+      supports-color: '*'
+    peerDependenciesMeta:
+      supports-color:
+        optional: true
+
+  decamelize-keys@1.1.1:
+    resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==}
+    engines: {node: '>=0.10.0'}
+
+  decamelize@1.2.0:
+    resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
+    engines: {node: '>=0.10.0'}
+
+  decode-named-character-reference@1.0.2:
+    resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==}
+
+  decompress-response@6.0.0:
+    resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
+    engines: {node: '>=10'}
+
+  dedent@1.5.3:
+    resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==}
+    peerDependencies:
+      babel-plugin-macros: ^3.1.0
+    peerDependenciesMeta:
+      babel-plugin-macros:
+        optional: true
+
+  deep-eql@5.0.2:
+    resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
+    engines: {node: '>=6'}
+
+  deep-extend@0.6.0:
+    resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
+    engines: {node: '>=4.0.0'}
+
+  deep-is@0.1.4:
+    resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+
+  deepmerge@4.3.1:
+    resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
+    engines: {node: '>=0.10.0'}
+
+  defaults@1.0.4:
+    resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
+
+  define-data-property@1.1.1:
+    resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==}
+    engines: {node: '>= 0.4'}
+
+  define-data-property@1.1.4:
+    resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
+    engines: {node: '>= 0.4'}
+
+  define-lazy-prop@2.0.0:
+    resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
+    engines: {node: '>=8'}
+
+  define-properties@1.2.1:
+    resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
+    engines: {node: '>= 0.4'}
+
+  delayed-stream@1.0.0:
+    resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
+    engines: {node: '>=0.4.0'}
+
+  dependency-tree@10.0.9:
+    resolution: {integrity: sha512-dwc59FRIsht+HfnTVM0BCjJaEWxdq2YAvEDy4/Hn6CwS3CBWMtFnL3aZGAkQn3XCYxk/YcTDE4jX2Q7bFTwCjA==}
+    engines: {node: '>=14'}
+    hasBin: true
+
+  deprecation@2.3.1:
+    resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==}
+
+  dequal@2.0.3:
+    resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
+    engines: {node: '>=6'}
+
+  detect-indent@5.0.0:
+    resolution: {integrity: sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==}
+    engines: {node: '>=4'}
+
+  detect-libc@2.0.1:
+    resolution: {integrity: sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==}
+    engines: {node: '>=8'}
+
+  detect-libc@2.0.3:
+    resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==}
+    engines: {node: '>=8'}
+
+  detective-amd@5.0.2:
+    resolution: {integrity: sha512-XFd/VEQ76HSpym80zxM68ieB77unNuoMwopU2TFT/ErUk5n4KvUTwW4beafAVUugrjV48l4BmmR0rh2MglBaiA==}
+    engines: {node: '>=14'}
+    hasBin: true
+
+  detective-cjs@5.0.1:
+    resolution: {integrity: sha512-6nTvAZtpomyz/2pmEmGX1sXNjaqgMplhQkskq2MLrar0ZAIkHMrDhLXkRiK2mvbu9wSWr0V5/IfiTrZqAQMrmQ==}
+    engines: {node: '>=14'}
+
+  detective-es6@4.0.1:
+    resolution: {integrity: sha512-k3Z5tB4LQ8UVHkuMrFOlvb3GgFWdJ9NqAa2YLUU/jTaWJIm+JJnEh4PsMc+6dfT223Y8ACKOaC0qcj7diIhBKw==}
+    engines: {node: '>=14'}
+
+  detective-postcss@6.1.3:
+    resolution: {integrity: sha512-7BRVvE5pPEvk2ukUWNQ+H2XOq43xENWbH0LcdCE14mwgTBEAMoAx+Fc1rdp76SmyZ4Sp48HlV7VedUnP6GA1Tw==}
+    engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+
+  detective-sass@5.0.3:
+    resolution: {integrity: sha512-YsYT2WuA8YIafp2RVF5CEfGhhyIVdPzlwQgxSjK+TUm3JoHP+Tcorbk3SfG0cNZ7D7+cYWa0ZBcvOaR0O8+LlA==}
+    engines: {node: '>=14'}
+
+  detective-scss@4.0.3:
+    resolution: {integrity: sha512-VYI6cHcD0fLokwqqPFFtDQhhSnlFWvU614J42eY6G0s8c+MBhi9QAWycLwIOGxlmD8I/XvGSOUV1kIDhJ70ZPg==}
+    engines: {node: '>=14'}
+
+  detective-stylus@4.0.0:
+    resolution: {integrity: sha512-TfPotjhszKLgFBzBhTOxNHDsutIxx9GTWjrL5Wh7Qx/ydxKhwUrlSFeLIn+ZaHPF+h0siVBkAQSuy6CADyTxgQ==}
+    engines: {node: '>=14'}
+
+  detective-typescript@11.2.0:
+    resolution: {integrity: sha512-ARFxjzizOhPqs1fYC/2NMC3N4jrQ6HvVflnXBTRqNEqJuXwyKLRr9CrJwkRcV/SnZt1sNXgsF6FPm0x57Tq0rw==}
+    engines: {node: ^14.14.0 || >=16.0.0}
+
+  deterministic-object-hash@2.0.2:
+    resolution: {integrity: sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==}
+    engines: {node: '>=18'}
+
+  devalue@5.1.1:
+    resolution: {integrity: sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==}
+
+  devlop@1.1.0:
+    resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
+
+  didyoumean@1.2.2:
+    resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
+
+  diff-sequences@29.6.3:
+    resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
+    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+  diff@5.2.0:
+    resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
+    engines: {node: '>=0.3.1'}
+
+  dir-glob@3.0.1:
+    resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
+    engines: {node: '>=8'}
+
+  djipevents@2.0.7:
+    resolution: {integrity: sha512-KNFYaU85imxOCKOUsIR70Iz9E19r96/X7LSH+u0tSoZdpWcBdzoqtTsU+wuLhc6GMpSFob+KInkZAbfKi01Bjg==}
+
+  dlv@1.1.3:
+    resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
+
+  dmd@6.2.3:
+    resolution: {integrity: sha512-SIEkjrG7cZ9GWZQYk/mH+mWtcRPly/3ibVuXO/tP/MFoWz6KiRK77tSMq6YQBPl7RljPtXPQ/JhxbNuCdi1bNw==}
+    engines: {node: '>=12'}
+
+  doctrine@2.1.0:
+    resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
+    engines: {node: '>=0.10.0'}
+
+  doctrine@3.0.0:
+    resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
+    engines: {node: '>=6.0.0'}
+
+  dot-prop@5.3.0:
+    resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==}
+    engines: {node: '>=8'}
+
+  dotenv-expand@10.0.0:
+    resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==}
+    engines: {node: '>=12'}
+
+  dotenv@16.3.1:
+    resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==}
+    engines: {node: '>=12'}
+
+  dset@3.1.4:
+    resolution: {integrity: sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA==}
+    engines: {node: '>=4'}
+
+  duplexer@0.1.2:
+    resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
+
+  eastasianwidth@0.2.0:
+    resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+
+  ejs@3.1.10:
+    resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==}
+    engines: {node: '>=0.10.0'}
+    hasBin: true
+
+  ejs@3.1.8:
+    resolution: {integrity: sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==}
+    engines: {node: '>=0.10.0'}
+    hasBin: true
+
+  electron-to-chromium@1.5.41:
+    resolution: {integrity: sha512-dfdv/2xNjX0P8Vzme4cfzHqnPm5xsZXwsolTYr0eyW18IUmNyG08vL+fttvinTfhKfIKdRoqkDIC9e9iWQCNYQ==}
+
+  emoji-regex@10.4.0:
+    resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==}
+
+  emoji-regex@8.0.0:
+    resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+  emoji-regex@9.2.2:
+    resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+
+  encoding@0.1.13:
+    resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==}
+
+  end-of-stream@1.4.4:
+    resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
+
+  enhanced-resolve@5.17.1:
+    resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==}
+    engines: {node: '>=10.13.0'}
+
+  enquirer@2.3.6:
+    resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==}
+    engines: {node: '>=8.6'}
+
+  entities@4.5.0:
+    resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+    engines: {node: '>=0.12'}
+
+  env-paths@2.2.1:
+    resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
+    engines: {node: '>=6'}
+
+  envinfo@7.13.0:
+    resolution: {integrity: sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==}
+    engines: {node: '>=4'}
+    hasBin: true
+
+  err-code@2.0.3:
+    resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==}
+
+  error-ex@1.3.2:
+    resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
+
+  es-abstract@1.22.3:
+    resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==}
+    engines: {node: '>= 0.4'}
+
+  es-abstract@1.23.3:
+    resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==}
+    engines: {node: '>= 0.4'}
+
+  es-define-property@1.0.0:
+    resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==}
+    engines: {node: '>= 0.4'}
+
+  es-errors@1.3.0:
+    resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+    engines: {node: '>= 0.4'}
+
+  es-module-lexer@1.5.4:
+    resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==}
+
+  es-object-atoms@1.0.0:
+    resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==}
+    engines: {node: '>= 0.4'}
+
+  es-set-tostringtag@2.0.1:
+    resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==}
+    engines: {node: '>= 0.4'}
+
+  es-set-tostringtag@2.0.3:
+    resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==}
+    engines: {node: '>= 0.4'}
+
+  es-shim-unscopables@1.0.0:
+    resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==}
+
+  es-shim-unscopables@1.0.2:
+    resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==}
+
+  es-to-primitive@1.2.1:
+    resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
+    engines: {node: '>= 0.4'}
+
+  esast-util-from-estree@2.0.0:
+    resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==}
+
+  esast-util-from-js@2.0.1:
+    resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==}
+
+  esbuild@0.21.5:
+    resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
+    engines: {node: '>=12'}
+    hasBin: true
+
+  escalade@3.1.1:
+    resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
+    engines: {node: '>=6'}
+
+  escalade@3.2.0:
+    resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+    engines: {node: '>=6'}
+
+  escape-string-regexp@1.0.5:
+    resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
+    engines: {node: '>=0.8.0'}
+
+  escape-string-regexp@2.0.0:
+    resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
+    engines: {node: '>=8'}
+
+  escape-string-regexp@4.0.0:
+    resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+    engines: {node: '>=10'}
+
+  escape-string-regexp@5.0.0:
+    resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
+    engines: {node: '>=12'}
+
+  escodegen@2.1.0:
+    resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==}
+    engines: {node: '>=6.0'}
+    hasBin: true
+
+  eslint-import-resolver-node@0.3.9:
+    resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
+
+  eslint-module-utils@2.12.0:
+    resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==}
+    engines: {node: '>=4'}
+    peerDependencies:
+      '@typescript-eslint/parser': '*'
+      eslint: '*'
+      eslint-import-resolver-node: '*'
+      eslint-import-resolver-typescript: '*'
+      eslint-import-resolver-webpack: '*'
+    peerDependenciesMeta:
+      '@typescript-eslint/parser':
+        optional: true
+      eslint:
+        optional: true
+      eslint-import-resolver-node:
+        optional: true
+      eslint-import-resolver-typescript:
+        optional: true
+      eslint-import-resolver-webpack:
+        optional: true
+
+  eslint-plugin-es@4.1.0:
+    resolution: {integrity: sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==}
+    engines: {node: '>=8.10.0'}
+    peerDependencies:
+      eslint: '>=4.19.1'
+
+  eslint-plugin-import@2.31.0:
+    resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==}
+    engines: {node: '>=4'}
+    peerDependencies:
+      '@typescript-eslint/parser': '*'
+      eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9
+    peerDependenciesMeta:
+      '@typescript-eslint/parser':
+        optional: true
+
+  eslint-plugin-n@15.6.1:
+    resolution: {integrity: sha512-R9xw9OtCRxxaxaszTQmQAlPgM+RdGjaL1akWuY/Fv9fRAi8Wj4CUKc6iYVG8QNRjRuo8/BqVYIpfqberJUEacA==}
+    engines: {node: '>=12.22.0'}
+    peerDependencies:
+      eslint: '>=7.0.0'
+
+  eslint-scope@7.2.2:
+    resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+  eslint-scope@8.1.0:
+    resolution: {integrity: sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+  eslint-utils@2.1.0:
+    resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==}
+    engines: {node: '>=6'}
+
+  eslint-utils@3.0.0:
+    resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
+    engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
+    peerDependencies:
+      eslint: '>=5'
+
+  eslint-visitor-keys@1.3.0:
+    resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==}
+    engines: {node: '>=4'}
+
+  eslint-visitor-keys@2.1.0:
+    resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
+    engines: {node: '>=10'}
+
+  eslint-visitor-keys@3.4.3:
+    resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+  eslint-visitor-keys@4.1.0:
+    resolution: {integrity: sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+  eslint@8.57.1:
+    resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+    deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options.
+    hasBin: true
+
+  eslint@9.13.0:
+    resolution: {integrity: sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+    hasBin: true
+    peerDependencies:
+      jiti: '*'
+    peerDependenciesMeta:
+      jiti:
+        optional: true
+
+  espree@10.2.0:
+    resolution: {integrity: sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==}
+    engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+  espree@9.6.1:
+    resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
+    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+  esprima@4.0.1:
+    resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
+    engines: {node: '>=4'}
+    hasBin: true
+
+  esquery@1.5.0:
+    resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==}
+    engines: {node: '>=0.10'}
+
+  esrecurse@4.3.0:
+    resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+    engines: {node: '>=4.0'}
+
+  estraverse@5.3.0:
+    resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+    engines: {node: '>=4.0'}
+
+  estree-util-attach-comments@3.0.0:
+    resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==}
+
+  estree-util-build-jsx@3.0.1:
+    resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==}
+
+  estree-util-is-identifier-name@3.0.0:
+    resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==}
+
+  estree-util-scope@1.0.0:
+    resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==}
+
+  estree-util-to-js@2.0.0:
+    resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==}
+
+  estree-util-visit@2.0.0:
+    resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==}
+
+  estree-walker@1.0.1:
+    resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==}
+
+  estree-walker@2.0.2:
+    resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
+  estree-walker@3.0.3:
+    resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
+
+  esutils@2.0.3:
+    resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+    engines: {node: '>=0.10.0'}
+
+  eventemitter3@4.0.7:
+    resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+
+  eventemitter3@5.0.1:
+    resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+
+  events@1.1.1:
+    resolution: {integrity: sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==}
+    engines: {node: '>=0.4.x'}
+
+  events@3.3.0:
+    resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
+    engines: {node: '>=0.8.x'}
+
+  execa@5.0.0:
+    resolution: {integrity: sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==}
+    engines: {node: '>=10'}
+
+  expand-template@2.0.3:
+    resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==}
+    engines: {node: '>=6'}
+
+  exponential-backoff@3.1.1:
+    resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==}
+
+  extend-shallow@2.0.1:
+    resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==}
+    engines: {node: '>=0.10.0'}
+
+  extend@3.0.2:
+    resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
+
+  external-editor@3.1.0:
+    resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
+    engines: {node: '>=4'}
+
+  fast-deep-equal@3.1.3:
+    resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+
+  fast-glob@3.3.2:
+    resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
+    engines: {node: '>=8.6.0'}
+
+  fast-json-stable-stringify@2.1.0:
+    resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+
+  fast-levenshtein@2.0.6:
+    resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+
+  fast-unique-numbers@8.0.13:
+    resolution: {integrity: sha512-7OnTFAVPefgw2eBJ1xj2PGGR9FwYzSUso9decayHgCDX4sJkHLdcsYTytTg+tYv+wKF3U8gJuSBz2jJpQV4u/g==}
+    engines: {node: '>=16.1.0'}
+
+  fast-uri@3.0.3:
+    resolution: {integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==}
+
+  fast-xml-parser@4.5.0:
+    resolution: {integrity: sha512-/PlTQCI96+fZMAOLMZK4CWG1ItCbfZ/0jx7UIJFChPNrx7tcEgerUgWbeieCM9MfHInUDyK8DWYZ+YrywDJuTg==}
+    hasBin: true
+
+  fastq@1.15.0:
+    resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
+
+  fdir@6.4.2:
+    resolution: {integrity: sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==}
+    peerDependencies:
+      picomatch: ^3 || ^4
+    peerDependenciesMeta:
+      picomatch:
+        optional: true
+
+  fetch-blob@3.2.0:
+    resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==}
+    engines: {node: ^12.20 || >= 14.13}
+
+  fflate@0.8.2:
+    resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==}
+
+  fftjs@0.0.4:
+    resolution: {integrity: sha512-nIWxQyth1LVD6NH8a+YZUv+McjzbOY6dMe4wv6Pq5cGfP+c8Rd1T8Dsd50DCWlNgzSqA3y9lOkpD6dZD3qHa1A==}
+
+  figures@3.2.0:
+    resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
+    engines: {node: '>=8'}
+
+  file-entry-cache@6.0.1:
+    resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
+    engines: {node: ^10.12.0 || >=12.0.0}
+
+  file-entry-cache@8.0.0:
+    resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
+    engines: {node: '>=16.0.0'}
+
+  file-set@4.0.2:
+    resolution: {integrity: sha512-fuxEgzk4L8waGXaAkd8cMr73Pm0FxOVkn8hztzUW7BAHhOGH90viQNXbiOsnecCWmfInqU6YmAMwxRMdKETceQ==}
+    engines: {node: '>=10'}
+
+  filelist@1.0.4:
+    resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
+
+  filing-cabinet@4.2.0:
+    resolution: {integrity: sha512-YZ21ryzRcyqxpyKggdYSoXx//d3sCJzM3lsYoaeg/FyXdADGJrUl+BW1KIglaVLJN5BBcMtWylkygY8zBp2MrQ==}
+    engines: {node: '>=14'}
+    hasBin: true
+
+  fill-range@7.0.1:
+    resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
+    engines: {node: '>=8'}
+
+  fill-range@7.1.1:
+    resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+    engines: {node: '>=8'}
+
+  find-replace@3.0.0:
+    resolution: {integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==}
+    engines: {node: '>=4.0.0'}
+
+  find-replace@5.0.2:
+    resolution: {integrity: sha512-Y45BAiE3mz2QsrN2fb5QEtO4qb44NcS7en/0y9PEVsg351HsLeVclP8QPMH79Le9sH3rs5RSwJu99W0WPZO43Q==}
+    engines: {node: '>=14'}
+    peerDependencies:
+      '@75lb/nature': latest
+    peerDependenciesMeta:
+      '@75lb/nature':
+        optional: true
+
+  find-up-simple@1.0.0:
+    resolution: {integrity: sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==}
+    engines: {node: '>=18'}
+
+  find-up@2.1.0:
+    resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==}
+    engines: {node: '>=4'}
+
+  find-up@4.1.0:
+    resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
+    engines: {node: '>=8'}
+
+  find-up@5.0.0:
+    resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+    engines: {node: '>=10'}
+
+  find-yarn-workspace-root2@1.2.16:
+    resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==}
+
+  flat-cache@3.2.0:
+    resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
+    engines: {node: ^10.12.0 || >=12.0.0}
+
+  flat-cache@4.0.1:
+    resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
+    engines: {node: '>=16'}
+
+  flat@5.0.2:
+    resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
+    hasBin: true
+
+  flatted@3.3.1:
+    resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}
+
+  flattie@1.1.1:
+    resolution: {integrity: sha512-9UbaD6XdAL97+k/n+N7JwX46K/M6Zc6KcFYskrYL8wbBV/Uyk0CTAMY0VT+qiK5PM7AIc9aTWYtq65U7T+aCNQ==}
+    engines: {node: '>=8'}
+
+  follow-redirects@1.15.2:
+    resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==}
+    engines: {node: '>=4.0'}
+    peerDependencies:
+      debug: '*'
+    peerDependenciesMeta:
+      debug:
+        optional: true
+
+  for-each@0.3.3:
+    resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
+
+  foreground-child@3.3.0:
+    resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==}
+    engines: {node: '>=14'}
+
+  form-data@4.0.0:
+    resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
+    engines: {node: '>= 6'}
+
+  formdata-polyfill@4.0.10:
+    resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
+    engines: {node: '>=12.20.0'}
+
+  fraction.js@4.3.7:
+    resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
+
+  from2@2.3.0:
+    resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==}
+
+  fs-constants@1.0.0:
+    resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
+
+  fs-extra@11.2.0:
+    resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==}
+    engines: {node: '>=14.14'}
+
+  fs-extra@9.1.0:
+    resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==}
+    engines: {node: '>=10'}
+
+  fs-minipass@2.1.0:
+    resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==}
+    engines: {node: '>= 8'}
+
+  fs-minipass@3.0.3:
+    resolution: {integrity: sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==}
+    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+  fs-then-native@2.0.0:
+    resolution: {integrity: sha512-X712jAOaWXkemQCAmWeg5rOT2i+KOpWz1Z/txk/cW0qlOu2oQ9H61vc5w3X/iyuUEfq/OyaFJ78/cZAQD1/bgA==}
+    engines: {node: '>=4.0.0'}
+
+  fs.realpath@1.0.0:
+    resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+
+  fsevents@2.3.3:
+    resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+    engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+    os: [darwin]
+
+  function-bind@1.1.2:
+    resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+  function.prototype.name@1.1.6:
+    resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==}
+    engines: {node: '>= 0.4'}
+
+  functions-have-names@1.2.3:
+    resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
+
+  gensync@1.0.0-beta.2:
+    resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+    engines: {node: '>=6.9.0'}
+
+  get-amd-module-type@5.0.1:
+    resolution: {integrity: sha512-jb65zDeHyDjFR1loOVk0HQGM5WNwoGB8aLWy3LKCieMKol0/ProHkhO2X1JxojuN10vbz1qNn09MJ7tNp7qMzw==}
+    engines: {node: '>=14'}
+
+  get-caller-file@2.0.5:
+    resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+    engines: {node: 6.* || 8.* || >= 10.*}
+
+  get-east-asian-width@1.3.0:
+    resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==}
+    engines: {node: '>=18'}
+
+  get-intrinsic@1.2.2:
+    resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==}
+
+  get-intrinsic@1.2.4:
+    resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==}
+    engines: {node: '>= 0.4'}
+
+  get-own-enumerable-property-symbols@3.0.2:
+    resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==}
+
+  get-pkg-repo@4.2.1:
+    resolution: {integrity: sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==}
+    engines: {node: '>=6.9.0'}
+    hasBin: true
+
+  get-port@5.1.1:
+    resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==}
+    engines: {node: '>=8'}
+
+  get-stdin@8.0.0:
+    resolution: {integrity: sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==}
+    engines: {node: '>=10'}
+
+  get-stream@6.0.0:
+    resolution: {integrity: sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==}
+    engines: {node: '>=10'}
+
+  get-stream@6.0.1:
+    resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
+    engines: {node: '>=10'}
+
+  get-symbol-description@1.0.0:
+    resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==}
+    engines: {node: '>= 0.4'}
+
+  get-symbol-description@1.0.2:
+    resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==}
+    engines: {node: '>= 0.4'}
+
+  git-raw-commits@3.0.0:
+    resolution: {integrity: sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw==}
+    engines: {node: '>=14'}
+    hasBin: true
+
+  git-remote-origin-url@2.0.0:
+    resolution: {integrity: sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==}
+    engines: {node: '>=4'}
+
+  git-semver-tags@5.0.1:
+    resolution: {integrity: sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA==}
+    engines: {node: '>=14'}
+    hasBin: true
+
+  git-up@7.0.0:
+    resolution: {integrity: sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==}
+
+  git-url-parse@14.0.0:
+    resolution: {integrity: sha512-NnLweV+2A4nCvn4U/m2AoYu0pPKlsmhK9cknG7IMwsjFY1S2jxM+mAhsDxyxfCIGfGaD+dozsyX4b6vkYc83yQ==}
+
+  gitconfiglocal@1.0.0:
+    resolution: {integrity: sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==}
+
+  github-from-package@0.0.0:
+    resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
+
+  github-slugger@2.0.0:
+    resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==}
+
+  glob-parent@5.1.2:
+    resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+    engines: {node: '>= 6'}
+
+  glob-parent@6.0.2:
+    resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+    engines: {node: '>=10.13.0'}
+
+  glob@10.4.5:
+    resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
+    hasBin: true
+
+  glob@7.1.4:
+    resolution: {integrity: sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==}
+    deprecated: Glob versions prior to v9 are no longer supported
+
+  glob@7.1.6:
+    resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==}
+    deprecated: Glob versions prior to v9 are no longer supported
+
+  glob@7.2.3:
+    resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+    deprecated: Glob versions prior to v9 are no longer supported
+
+  glob@9.3.5:
+    resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==}
+    engines: {node: '>=16 || 14 >=14.17'}
+
+  globals@11.12.0:
+    resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
+    engines: {node: '>=4'}
+
+  globals@13.24.0:
+    resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
+    engines: {node: '>=8'}
+
+  globals@14.0.0:
+    resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
+    engines: {node: '>=18'}
+
+  globalthis@1.0.3:
+    resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==}
+    engines: {node: '>= 0.4'}
+
+  globalthis@1.0.4:
+    resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
+    engines: {node: '>= 0.4'}
+
+  globby@11.1.0:
+    resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
+    engines: {node: '>=10'}
+
+  gonzales-pe@4.3.0:
+    resolution: {integrity: sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==}
+    engines: {node: '>=0.6.0'}
+    hasBin: true
+
+  google-closure-compiler-java@20221102.0.1:
+    resolution: {integrity: sha512-rMKLEma3uSe/6MGHtivDezTv4u5iaDEyxoy9No+1WruPSZ5h1gBZLONcfCA8JaoGojFPdHZI1qbwT0EveEWnAg==}
+
+  google-closure-compiler-linux@20221102.0.1:
+    resolution: {integrity: sha512-rj1E1whT4j/giidQ44v4RoO8GcvU81VU9YB5RlRM0hWDvCGWjQasDABGnF/YLWLl5PXAAfJpa/hy8ckv5/r97g==}
+    cpu: [x32, x64]
+    os: [linux]
+
+  google-closure-compiler-osx@20221102.0.1:
+    resolution: {integrity: sha512-Cv993yr9a2DLFgYnsv4m6dNUk5jousd6W6la12x2fDbhxTLewYrw7CrCaVEVw1SU3XErVmdHOZQjFsVMhcZjCw==}
+    cpu: [x32, x64, arm64]
+    os: [darwin]
+
+  google-closure-compiler-windows@20221102.0.1:
+    resolution: {integrity: sha512-jRwHGekG/oDihHdKAEiYN5z0cBF+brL0bYtuEOXx4fAmq5tHe4OxKtSEEprCnVZZL0aG/boGprACPvsDRsXT7Q==}
+    cpu: [x32, x64]
+    os: [win32]
+
+  google-closure-compiler@20221102.0.1:
+    resolution: {integrity: sha512-edAlsyJEsy2I983xWBlBfdSme16uyY007HM2OwPOoWPEFgmR100ggUabJbIegXZgbSLH51kyeJMQKuWhiHgzcA==}
+    engines: {node: '>=10'}
+    hasBin: true
+
+  google-closure-library@20221102.0.0:
+    resolution: {integrity: sha512-M5+LWPS99tMB9dOGpZjLT9CdIYpnwBZiwB+dCmZFOOvwJiOWytntzJ/a/hoNF6zxD15l3GWwRJiEkL636D6DRQ==}
+
+  gopd@1.0.1:
+    resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
+
+  graceful-fs@4.2.10:
+    resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
+
+  graceful-fs@4.2.11:
+    resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+  graphemer@1.4.0:
+    resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
+
+  gray-matter@4.0.3:
+    resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==}
+    engines: {node: '>=6.0'}
+
+  handlebars@4.7.8:
+    resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==}
+    engines: {node: '>=0.4.7'}
+    hasBin: true
+
+  hard-rejection@2.1.0:
+    resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==}
+    engines: {node: '>=6'}
+
+  has-bigints@1.0.2:
+    resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
+
+  has-flag@3.0.0:
+    resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
+    engines: {node: '>=4'}
+
+  has-flag@4.0.0:
+    resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+    engines: {node: '>=8'}
+
+  has-property-descriptors@1.0.0:
+    resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==}
+
+  has-property-descriptors@1.0.2:
+    resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
+
+  has-proto@1.0.1:
+    resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==}
+    engines: {node: '>= 0.4'}
+
+  has-proto@1.0.3:
+    resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==}
+    engines: {node: '>= 0.4'}
+
+  has-symbols@1.0.3:
+    resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
+    engines: {node: '>= 0.4'}
+
+  has-tostringtag@1.0.0:
+    resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==}
+    engines: {node: '>= 0.4'}
+
+  has-tostringtag@1.0.2:
+    resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+    engines: {node: '>= 0.4'}
+
+  has-unicode@2.0.1:
+    resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==}
+
+  has@1.0.3:
+    resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
+    engines: {node: '>= 0.4.0'}
+
+  hasown@2.0.2:
+    resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
+    engines: {node: '>= 0.4'}
+
+  hast-util-from-html@2.0.3:
+    resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==}
+
+  hast-util-from-parse5@8.0.1:
+    resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==}
+
+  hast-util-has-property@1.0.4:
+    resolution: {integrity: sha512-ghHup2voGfgFoHMGnaLHOjbYFACKrRh9KFttdCzMCbFoBMJXiNi2+XTrPP8+q6cDJM/RSqlCfVWrjp1H201rZg==}
+
+  hast-util-heading-rank@3.0.0:
+    resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==}
+
+  hast-util-is-element@3.0.0:
+    resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==}
+
+  hast-util-parse-selector@4.0.0:
+    resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==}
+
+  hast-util-raw@9.0.1:
+    resolution: {integrity: sha512-5m1gmba658Q+lO5uqL5YNGQWeh1MYWZbZmWrM5lncdcuiXuo5E2HT/CIOp0rLF8ksfSwiCVJ3twlgVRyTGThGA==}
+
+  hast-util-to-estree@3.1.0:
+    resolution: {integrity: sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==}
+
+  hast-util-to-html@9.0.3:
+    resolution: {integrity: sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==}
+
+  hast-util-to-jsx-runtime@2.3.2:
+    resolution: {integrity: sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg==}
+
+  hast-util-to-parse5@8.0.0:
+    resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==}
+
+  hast-util-to-string@3.0.0:
+    resolution: {integrity: sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA==}
+
+  hast-util-to-text@4.0.2:
+    resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==}
+
+  hast-util-whitespace@3.0.0:
+    resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
+
+  hastscript@8.0.0:
+    resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==}
+
+  hosted-git-info@2.8.9:
+    resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
+
+  hosted-git-info@4.1.0:
+    resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==}
+    engines: {node: '>=10'}
+
+  hosted-git-info@7.0.2:
+    resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==}
+    engines: {node: ^16.14.0 || >=18.0.0}
+
+  hs2js@0.0.8:
+    resolution: {integrity: sha512-wFSenhY2MB1ACuwaJq0QyDk6yZiYwha/yOgAa2scsLvqEJTdHY2KXhsy8uZw+G2oVxQGyXs0OPf5gXN7HkP9mA==}
+
+  html-escaper@3.0.3:
+    resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==}
+
+  html-void-elements@3.0.0:
+    resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
+
+  http-cache-semantics@4.1.1:
+    resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==}
+
+  http-proxy-agent@7.0.2:
+    resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
+    engines: {node: '>= 14'}
+
+  https-proxy-agent@5.0.1:
+    resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
+    engines: {node: '>= 6'}
+
+  https-proxy-agent@7.0.5:
+    resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==}
+    engines: {node: '>= 14'}
+
+  human-signals@2.1.0:
+    resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
+    engines: {node: '>=10.17.0'}
+
+  hydra-synth@1.3.29:
+    resolution: {integrity: sha512-KK1wMGpo9AuVivvD9SP7ukPS7T/rMaYA7XMlnRF3oFbTw9u4l4aVTyexG+KmCd5XDD/4GulR1jVzySZlAuGPCw==}
+
+  iconv-lite@0.4.24:
+    resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
+    engines: {node: '>=0.10.0'}
+
+  iconv-lite@0.6.3:
+    resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
+    engines: {node: '>=0.10.0'}
+
+  idb@7.1.1:
+    resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==}
+
+  ieee754@1.2.1:
+    resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+  ignore-walk@6.0.5:
+    resolution: {integrity: sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==}
+    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+  ignore@5.2.4:
+    resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
+    engines: {node: '>= 4'}
+
+  import-fresh@3.3.0:
+    resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
+    engines: {node: '>=6'}
+
+  import-local@3.1.0:
+    resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==}
+    engines: {node: '>=8'}
+    hasBin: true
+
+  import-meta-resolve@4.1.0:
+    resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==}
+
+  imurmurhash@0.1.4:
+    resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+    engines: {node: '>=0.8.19'}
+
+  indent-string@4.0.0:
+    resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
+    engines: {node: '>=8'}
+
+  inflight@1.0.6:
+    resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+    deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+
+  inherits@2.0.4:
+    resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+  ini@1.3.8:
+    resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
+
+  ini@4.1.3:
+    resolution: {integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==}
+    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+  init-package-json@6.0.3:
+    resolution: {integrity: sha512-Zfeb5ol+H+eqJWHTaGca9BovufyGeIfr4zaaBorPmJBMrJ+KBnN+kQx2ZtXdsotUTgldHmHQV44xvUWOUA7E2w==}
+    engines: {node: ^16.14.0 || >=18.0.0}
+
+  inline-style-parser@0.1.1:
+    resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==}
+
+  inline-style-parser@0.2.4:
+    resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==}
+
+  inquirer@8.2.5:
+    resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==}
+    engines: {node: '>=12.0.0'}
+
+  internal-slot@1.0.6:
+    resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==}
+    engines: {node: '>= 0.4'}
+
+  internal-slot@1.0.7:
+    resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==}
+    engines: {node: '>= 0.4'}
+
+  into-stream@6.0.0:
+    resolution: {integrity: sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA==}
+    engines: {node: '>=10'}
+
+  ip-address@9.0.5:
+    resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==}
+    engines: {node: '>= 12'}
+
+  is-alphabetical@2.0.1:
+    resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==}
+
+  is-alphanumerical@2.0.1:
+    resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==}
+
+  is-array-buffer@3.0.2:
+    resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==}
+
+  is-array-buffer@3.0.4:
+    resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==}
+    engines: {node: '>= 0.4'}
+
+  is-arrayish@0.2.1:
+    resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
+
+  is-arrayish@0.3.2:
+    resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
+
+  is-bigint@1.0.4:
+    resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
+
+  is-binary-path@2.1.0:
+    resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+    engines: {node: '>=8'}
+
+  is-boolean-object@1.1.2:
+    resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
+    engines: {node: '>= 0.4'}
+
+  is-buffer@2.0.5:
+    resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==}
+    engines: {node: '>=4'}
+
+  is-callable@1.2.7:
+    resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
+    engines: {node: '>= 0.4'}
+
+  is-ci@3.0.1:
+    resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==}
+    hasBin: true
+
+  is-core-module@2.15.1:
+    resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==}
+    engines: {node: '>= 0.4'}
+
+  is-core-module@2.9.0:
+    resolution: {integrity: sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==}
+
+  is-data-view@1.0.1:
+    resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==}
+    engines: {node: '>= 0.4'}
+
+  is-date-object@1.0.5:
+    resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
+    engines: {node: '>= 0.4'}
+
+  is-decimal@2.0.1:
+    resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==}
+
+  is-docker@2.2.1:
+    resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
+    engines: {node: '>=8'}
+    hasBin: true
+
+  is-docker@3.0.0:
+    resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
+    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+    hasBin: true
+
+  is-extendable@0.1.1:
+    resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==}
+    engines: {node: '>=0.10.0'}
+
+  is-extglob@2.1.1:
+    resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+    engines: {node: '>=0.10.0'}
+
+  is-fullwidth-code-point@2.0.0:
+    resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==}
+    engines: {node: '>=4'}
+
+  is-fullwidth-code-point@3.0.0:
+    resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+    engines: {node: '>=8'}
+
+  is-glob@4.0.3:
+    resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+    engines: {node: '>=0.10.0'}
+
+  is-hexadecimal@2.0.1:
+    resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
+
+  is-inside-container@1.0.0:
+    resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
+    engines: {node: '>=14.16'}
+    hasBin: true
+
+  is-interactive@1.0.0:
+    resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
+    engines: {node: '>=8'}
+
+  is-interactive@2.0.0:
+    resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==}
+    engines: {node: '>=12'}
+
+  is-lambda@1.0.1:
+    resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==}
+
+  is-module@1.0.0:
+    resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
+
+  is-negative-zero@2.0.2:
+    resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==}
+    engines: {node: '>= 0.4'}
+
+  is-negative-zero@2.0.3:
+    resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==}
+    engines: {node: '>= 0.4'}
+
+  is-number-object@1.0.7:
+    resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
+    engines: {node: '>= 0.4'}
+
+  is-number@7.0.0:
+    resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+    engines: {node: '>=0.12.0'}
+
+  is-obj@1.0.1:
+    resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==}
+    engines: {node: '>=0.10.0'}
+
+  is-obj@2.0.0:
+    resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
+    engines: {node: '>=8'}
+
+  is-path-inside@3.0.3:
+    resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
+    engines: {node: '>=8'}
+
+  is-plain-obj@1.1.0:
+    resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==}
+    engines: {node: '>=0.10.0'}
+
+  is-plain-obj@4.1.0:
+    resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
+    engines: {node: '>=12'}
+
+  is-plain-object@2.0.4:
+    resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
+    engines: {node: '>=0.10.0'}
+
+  is-plain-object@5.0.0:
+    resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
+    engines: {node: '>=0.10.0'}
+
+  is-regex@1.1.4:
+    resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
+    engines: {node: '>= 0.4'}
+
+  is-regexp@1.0.0:
+    resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==}
+    engines: {node: '>=0.10.0'}
+
+  is-relative-path@1.0.2:
+    resolution: {integrity: sha512-i1h+y50g+0hRbBD+dbnInl3JlJ702aar58snAeX+MxBAPvzXGej7sYoPMhlnykabt0ZzCJNBEyzMlekuQZN7fA==}
+
+  is-shared-array-buffer@1.0.2:
+    resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==}
+
+  is-shared-array-buffer@1.0.3:
+    resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==}
+    engines: {node: '>= 0.4'}
+
+  is-ssh@1.4.0:
+    resolution: {integrity: sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==}
+
+  is-stream@2.0.0:
+    resolution: {integrity: sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==}
+    engines: {node: '>=8'}
+
+  is-stream@2.0.1:
+    resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
+    engines: {node: '>=8'}
+
+  is-string@1.0.7:
+    resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
+    engines: {node: '>= 0.4'}
+
+  is-symbol@1.0.4:
+    resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
+    engines: {node: '>= 0.4'}
+
+  is-text-path@1.0.1:
+    resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==}
+    engines: {node: '>=0.10.0'}
+
+  is-typed-array@1.1.12:
+    resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==}
+    engines: {node: '>= 0.4'}
+
+  is-typed-array@1.1.13:
+    resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==}
+    engines: {node: '>= 0.4'}
+
+  is-unicode-supported@0.1.0:
+    resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
+    engines: {node: '>=10'}
+
+  is-unicode-supported@1.3.0:
+    resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==}
+    engines: {node: '>=12'}
+
+  is-unicode-supported@2.1.0:
+    resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==}
+    engines: {node: '>=18'}
+
+  is-url-superb@4.0.0:
+    resolution: {integrity: sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==}
+    engines: {node: '>=10'}
+
+  is-url@1.2.4:
+    resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==}
+
+  is-weakref@1.0.2:
+    resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
+
+  is-wsl@2.2.0:
+    resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
+    engines: {node: '>=8'}
+
+  is-wsl@3.1.0:
+    resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==}
+    engines: {node: '>=16'}
+
+  isarray@0.0.1:
+    resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==}
+
+  isarray@1.0.0:
+    resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
+
+  isarray@2.0.5:
+    resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
+
+  isexe@2.0.0:
+    resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+  isexe@3.1.1:
+    resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==}
+    engines: {node: '>=16'}
+
+  isobject@3.0.1:
+    resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
+    engines: {node: '>=0.10.0'}
+
+  jackspeak@3.4.3:
+    resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
+
+  jake@10.8.5:
+    resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==}
+    engines: {node: '>=10'}
+    hasBin: true
+
+  jake@10.9.2:
+    resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==}
+    engines: {node: '>=10'}
+    hasBin: true
+
+  jazz-midi@1.7.9:
+    resolution: {integrity: sha512-c8c4BBgwxdsIr1iVm53nadCrtH7BUlnX3V95ciK/gbvXN/ndE5+POskBalXgqlc/r9p2XUbdLTrgrC6fou5p9w==}
+    engines: {node: '>=10.0.0'}
+
+  jest-diff@29.7.0:
+    resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==}
+    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+  jest-get-type@29.6.3:
+    resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==}
+    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+  jest-worker@26.6.2:
+    resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==}
+    engines: {node: '>= 10.13.0'}
+
+  jiti@1.21.0:
+    resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==}
+    hasBin: true
+
+  js-tokens@4.0.0:
+    resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+  js-yaml@3.14.1:
+    resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
+    hasBin: true
+
+  js-yaml@4.1.0:
+    resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+    hasBin: true
+
+  js2xmlparser@4.0.2:
+    resolution: {integrity: sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==}
+
+  jsbn@1.1.0:
+    resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==}
+
+  jsdoc-api@8.1.1:
+    resolution: {integrity: sha512-yas9E4h8NHp1CTEZiU/DPNAvLoUcip+Hl8Xi1RBYzHqSrgsF+mImAZNtwymrXvgbrgl4bNGBU9syulM0JzFeHQ==}
+    engines: {node: '>=12.17'}
+
+  jsdoc-json@2.0.2:
+    resolution: {integrity: sha512-n0vVkWvBMHFNUsW6HUhMrVCk+nJZwW3kpd9/JiCgdYvjjZV3NcP5fV3+lTgOkOA/bTKJxbCKT8Au92FHII3pnA==}
+
+  jsdoc-parse@6.2.4:
+    resolution: {integrity: sha512-MQA+lCe3ioZd0uGbyB3nDCDZcKgKC7m/Ivt0LgKZdUoOlMJxUWJQ3WI6GeyHp9ouznKaCjlp7CU9sw5k46yZTw==}
+    engines: {node: '>=12'}
+
+  jsdoc-to-markdown@8.0.3:
+    resolution: {integrity: sha512-JGYYd5xygnQt1DIxH+HUI+X/ynL8qWihzIF0n15NSCNtM6MplzawURRcaLI2WkiS2hIjRIgsphCOfM7FkaWiNg==}
+    engines: {node: '>=12.17'}
+    hasBin: true
+
+  jsdoc@4.0.3:
+    resolution: {integrity: sha512-Nu7Sf35kXJ1MWDZIMAuATRQTg1iIPdzh7tqJ6jjvaU/GfDf+qi5UV8zJR3Mo+/pYFvm8mzay4+6O5EWigaQBQw==}
+    engines: {node: '>=12.0.0'}
+    hasBin: true
+
+  jsesc@2.5.2:
+    resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
+    engines: {node: '>=4'}
+    hasBin: true
+
+  jsesc@3.0.2:
+    resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==}
+    engines: {node: '>=6'}
+    hasBin: true
+
+  json-buffer@3.0.1:
+    resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+
+  json-parse-better-errors@1.0.2:
+    resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==}
+
+  json-parse-even-better-errors@2.3.1:
+    resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+
+  json-parse-even-better-errors@3.0.2:
+    resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==}
+    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+  json-schema-traverse@0.4.1:
+    resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+
+  json-schema-traverse@1.0.0:
+    resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+
+  json-schema@0.4.0:
+    resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==}
+
+  json-stable-stringify-without-jsonify@1.0.1:
+    resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+
+  json-stringify-nice@1.1.4:
+    resolution: {integrity: sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==}
+
+  json-stringify-safe@5.0.1:
+    resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
+
+  json5@1.0.2:
+    resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
+    hasBin: true
+
+  json5@2.2.3:
+    resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+    engines: {node: '>=6'}
+    hasBin: true
+
+  jsonc-parser@3.2.0:
+    resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==}
+
+  jsonfile@6.1.0:
+    resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
+
+  jsonparse@1.3.1:
+    resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
+    engines: {'0': node >= 0.2.0}
+
+  jsonpointer@5.0.1:
+    resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==}
+    engines: {node: '>=0.10.0'}
+
+  just-diff-apply@5.5.0:
+    resolution: {integrity: sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==}
+
+  just-diff@6.0.2:
+    resolution: {integrity: sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==}
+
+  jzz@1.8.6:
+    resolution: {integrity: sha512-O32b8/Z9oHxsIT/rNV8iEw+RThIBcMAK62fIvMZ3NacR3+T2w4BTJBFNqhOYlkOQhxQD3MZ7b3o69RKAx4xymg==}
+
+  keyv@4.5.4:
+    resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+
+  kind-of@6.0.3:
+    resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
+    engines: {node: '>=0.10.0'}
+
+  klaw@3.0.0:
+    resolution: {integrity: sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==}
+
+  kleur@3.0.3:
+    resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
+    engines: {node: '>=6'}
+
+  kleur@4.1.5:
+    resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
+    engines: {node: '>=6'}
+
+  lerna@8.1.8:
+    resolution: {integrity: sha512-Rmo5ShMx73xM2CUcRixjmpZIXB7ZFlWEul1YvJyx/rH4onAwDHtUGD7Rx4NZYL8QSRiQHroglM2Oyq+WqA4BYg==}
+    engines: {node: '>=18.0.0'}
+    hasBin: true
+
+  leven@3.1.0:
+    resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
+    engines: {node: '>=6'}
+
+  levn@0.4.1:
+    resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
+    engines: {node: '>= 0.8.0'}
+
+  libnpmaccess@8.0.6:
+    resolution: {integrity: sha512-uM8DHDEfYG6G5gVivVl+yQd4pH3uRclHC59lzIbSvy7b5FEwR+mU49Zq1jEyRtRFv7+M99mUW9S0wL/4laT4lw==}
+    engines: {node: ^16.14.0 || >=18.0.0}
+
+  libnpmpublish@9.0.9:
+    resolution: {integrity: sha512-26zzwoBNAvX9AWOPiqqF6FG4HrSCPsHFkQm7nT+xU1ggAujL/eae81RnCv4CJ2In9q9fh10B88sYSzKCUh/Ghg==}
+    engines: {node: ^16.14.0 || >=18.0.0}
+
+  lilconfig@2.1.0:
+    resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
+    engines: {node: '>=10'}
+
+  lilconfig@3.0.0:
+    resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==}
+    engines: {node: '>=14'}
+
+  lines-and-columns@1.2.4:
+    resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+
+  lines-and-columns@2.0.3:
+    resolution: {integrity: sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==}
+    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+  linkify-it@5.0.0:
+    resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==}
+
+  lite-youtube-embed@0.3.3:
+    resolution: {integrity: sha512-gFfVVnj6NRjxVfJKo3qoLtpi0v5mn3AcR4eKD45wrxQuxzveFJUb+7Cr6uV6n+DjO8X3p0UzPPquhGt0H/y+NA==}
+
+  load-json-file@4.0.0:
+    resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==}
+    engines: {node: '>=4'}
+
+  load-json-file@6.2.0:
+    resolution: {integrity: sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==}
+    engines: {node: '>=8'}
+
+  load-yaml-file@0.2.0:
+    resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==}
+    engines: {node: '>=6'}
+
+  locate-path@2.0.0:
+    resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==}
+    engines: {node: '>=4'}
+
+  locate-path@5.0.0:
+    resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
+    engines: {node: '>=8'}
+
+  locate-path@6.0.0:
+    resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+    engines: {node: '>=10'}
+
+  lodash.camelcase@4.3.0:
+    resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
+
+  lodash.castarray@4.4.0:
+    resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==}
+
+  lodash.debounce@4.0.8:
+    resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
+
+  lodash.ismatch@4.4.0:
+    resolution: {integrity: sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==}
+
+  lodash.isplainobject@4.0.6:
+    resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
+
+  lodash.merge@4.6.2:
+    resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+
+  lodash.omit@4.5.0:
+    resolution: {integrity: sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg==}
+
+  lodash.padend@4.6.1:
+    resolution: {integrity: sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw==}
+
+  lodash.sortby@4.7.0:
+    resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==}
+
+  lodash@4.17.21:
+    resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+
+  log-symbols@4.1.0:
+    resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
+    engines: {node: '>=10'}
+
+  log-symbols@6.0.0:
+    resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==}
+    engines: {node: '>=18'}
+
+  longest-streak@3.1.0:
+    resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
+
+  loose-envify@1.4.0:
+    resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
+    hasBin: true
+
+  loupe@3.1.2:
+    resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==}
+
+  lru-cache@10.4.3:
+    resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
+
+  lru-cache@5.1.1:
+    resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+
+  lru-cache@6.0.0:
+    resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
+    engines: {node: '>=10'}
+
+  lru-cache@9.1.1:
+    resolution: {integrity: sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A==}
+    engines: {node: 14 || >=16.14}
+
+  magic-string@0.25.9:
+    resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
+
+  magic-string@0.30.12:
+    resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==}
+
+  magicast@0.3.5:
+    resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==}
+
+  make-dir@2.1.0:
+    resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==}
+    engines: {node: '>=6'}
+
+  make-dir@4.0.0:
+    resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
+    engines: {node: '>=10'}
+
+  make-fetch-happen@13.0.1:
+    resolution: {integrity: sha512-cKTUFc/rbKUd/9meOvgrpJ2WrNzymt6jfRDdwg5UCnVzv9dTpEj9JS5m3wtziXVCjluIXyL8pcaukYqezIzZQA==}
+    engines: {node: ^16.14.0 || >=18.0.0}
+
+  map-obj@1.0.1:
+    resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==}
+    engines: {node: '>=0.10.0'}
+
+  map-obj@4.3.0:
+    resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==}
+    engines: {node: '>=8'}
+
+  markdown-extensions@2.0.0:
+    resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==}
+    engines: {node: '>=16'}
+
+  markdown-it-anchor@8.6.7:
+    resolution: {integrity: sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==}
+    peerDependencies:
+      '@types/markdown-it': '*'
+      markdown-it: '*'
+
+  markdown-it@14.1.0:
+    resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==}
+    hasBin: true
+
+  markdown-table@3.0.3:
+    resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==}
+
+  marked@4.2.12:
+    resolution: {integrity: sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw==}
+    engines: {node: '>= 12'}
+    hasBin: true
+
+  marked@4.3.0:
+    resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==}
+    engines: {node: '>= 12'}
+    hasBin: true
+
+  mdast-util-definitions@6.0.0:
+    resolution: {integrity: sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==}
+
+  mdast-util-find-and-replace@3.0.1:
+    resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==}
+
+  mdast-util-from-markdown@2.0.1:
+    resolution: {integrity: sha512-aJEUyzZ6TzlsX2s5B4Of7lN7EQtAxvtradMMglCQDyaTFgse6CmtmdJ15ElnVRlCg1vpNyVtbem0PWzlNieZsA==}
+
+  mdast-util-gfm-autolink-literal@2.0.0:
+    resolution: {integrity: sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==}
+
+  mdast-util-gfm-footnote@2.0.0:
+    resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==}
+
+  mdast-util-gfm-strikethrough@2.0.0:
+    resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==}
+
+  mdast-util-gfm-table@2.0.0:
+    resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==}
+
+  mdast-util-gfm-task-list-item@2.0.0:
+    resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==}
+
+  mdast-util-gfm@3.0.0:
+    resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==}
+
+  mdast-util-mdx-expression@2.0.1:
+    resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==}
+
+  mdast-util-mdx-jsx@3.1.3:
+    resolution: {integrity: sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==}
+
+  mdast-util-mdx@3.0.0:
+    resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==}
+
+  mdast-util-mdxjs-esm@2.0.1:
+    resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==}
+
+  mdast-util-phrasing@4.0.0:
+    resolution: {integrity: sha512-xadSsJayQIucJ9n053dfQwVu1kuXg7jCTdYsMK8rqzKZh52nLfSH/k0sAxE0u+pj/zKZX+o5wB+ML5mRayOxFA==}
+
+  mdast-util-to-hast@13.2.0:
+    resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==}
+
+  mdast-util-to-markdown@2.1.0:
+    resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==}
+
+  mdast-util-to-string@4.0.0:
+    resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
+
+  mdast-util-toc@7.0.0:
+    resolution: {integrity: sha512-C28UcSqjmnWuvgT8d97qpaItHKvySqVPAECUzqQ51xuMyNFFJwcFoKW77KoMjtXrclTidLQFDzLUmTmrshRweA==}
+
+  mdurl@2.0.0:
+    resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==}
+
+  meow@8.1.2:
+    resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==}
+    engines: {node: '>=10'}
+
+  merge-stream@2.0.0:
+    resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+
+  merge2@1.4.1:
+    resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+    engines: {node: '>= 8'}
+
+  meyda@5.6.2:
+    resolution: {integrity: sha512-FSHo8XDdmhIDeBJ2nht9WYRj0VIQ8wbzcfken0YIHUuuxVMnpDcvzVfXyY2m6YkA7q6ypzKROUNV4yoXG0uogQ==}
+    hasBin: true
+
+  micromark-core-commonmark@2.0.1:
+    resolution: {integrity: sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==}
+
+  micromark-extension-gfm-autolink-literal@2.0.0:
+    resolution: {integrity: sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==}
+
+  micromark-extension-gfm-footnote@2.0.0:
+    resolution: {integrity: sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==}
+
+  micromark-extension-gfm-strikethrough@2.0.0:
+    resolution: {integrity: sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==}
+
+  micromark-extension-gfm-table@2.0.0:
+    resolution: {integrity: sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==}
+
+  micromark-extension-gfm-tagfilter@2.0.0:
+    resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==}
+
+  micromark-extension-gfm-task-list-item@2.0.1:
+    resolution: {integrity: sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==}
+
+  micromark-extension-gfm@3.0.0:
+    resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==}
+
+  micromark-extension-mdx-expression@3.0.0:
+    resolution: {integrity: sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==}
+
+  micromark-extension-mdx-jsx@3.0.1:
+    resolution: {integrity: sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==}
+
+  micromark-extension-mdx-md@2.0.0:
+    resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==}
+
+  micromark-extension-mdxjs-esm@3.0.0:
+    resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==}
+
+  micromark-extension-mdxjs@3.0.0:
+    resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==}
+
+  micromark-factory-destination@2.0.0:
+    resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==}
+
+  micromark-factory-label@2.0.0:
+    resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==}
+
+  micromark-factory-mdx-expression@2.0.2:
+    resolution: {integrity: sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw==}
+
+  micromark-factory-space@2.0.0:
+    resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==}
+
+  micromark-factory-title@2.0.0:
+    resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==}
+
+  micromark-factory-whitespace@2.0.0:
+    resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==}
+
+  micromark-util-character@2.1.0:
+    resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==}
+
+  micromark-util-chunked@2.0.0:
+    resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==}
+
+  micromark-util-classify-character@2.0.0:
+    resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==}
+
+  micromark-util-combine-extensions@2.0.0:
+    resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==}
+
+  micromark-util-decode-numeric-character-reference@2.0.1:
+    resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==}
+
+  micromark-util-decode-string@2.0.0:
+    resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==}
+
+  micromark-util-encode@2.0.0:
+    resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==}
+
+  micromark-util-events-to-acorn@2.0.2:
+    resolution: {integrity: sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==}
+
+  micromark-util-html-tag-name@2.0.0:
+    resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==}
+
+  micromark-util-normalize-identifier@2.0.0:
+    resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==}
+
+  micromark-util-resolve-all@2.0.0:
+    resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==}
+
+  micromark-util-sanitize-uri@2.0.0:
+    resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==}
+
+  micromark-util-subtokenize@2.0.1:
+    resolution: {integrity: sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==}
+
+  micromark-util-symbol@2.0.0:
+    resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==}
+
+  micromark-util-types@2.0.0:
+    resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==}
+
+  micromark@4.0.0:
+    resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==}
+
+  micromatch@4.0.5:
+    resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
+    engines: {node: '>=8.6'}
+
+  micromatch@4.0.8:
+    resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+    engines: {node: '>=8.6'}
+
+  mime-db@1.52.0:
+    resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+    engines: {node: '>= 0.6'}
+
+  mime-types@2.1.35:
+    resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+    engines: {node: '>= 0.6'}
+
+  mimic-fn@2.1.0:
+    resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
+    engines: {node: '>=6'}
+
+  mimic-function@5.0.1:
+    resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
+    engines: {node: '>=18'}
+
+  mimic-response@3.1.0:
+    resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
+    engines: {node: '>=10'}
+
+  min-indent@1.0.1:
+    resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
+    engines: {node: '>=4'}
+
+  mini-svg-data-uri@1.4.4:
+    resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==}
+    hasBin: true
+
+  minimatch@3.0.5:
+    resolution: {integrity: sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==}
+
+  minimatch@3.1.2:
+    resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+
+  minimatch@5.1.6:
+    resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
+    engines: {node: '>=10'}
+
+  minimatch@8.0.4:
+    resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==}
+    engines: {node: '>=16 || 14 >=14.17'}
+
+  minimatch@9.0.5:
+    resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
+    engines: {node: '>=16 || 14 >=14.17'}
+
+  minimist-options@4.1.0:
+    resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==}
+    engines: {node: '>= 6'}
+
+  minimist@1.2.7:
+    resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==}
+
+  minimist@1.2.8:
+    resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+
+  minipass-collect@2.0.1:
+    resolution: {integrity: sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==}
+    engines: {node: '>=16 || 14 >=14.17'}
+
+  minipass-fetch@3.0.5:
+    resolution: {integrity: sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==}
+    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+  minipass-flush@1.0.5:
+    resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==}
+    engines: {node: '>= 8'}
+
+  minipass-pipeline@1.2.4:
+    resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==}
+    engines: {node: '>=8'}
+
+  minipass-sized@1.0.3:
+    resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==}
+    engines: {node: '>=8'}
+
+  minipass@3.3.6:
+    resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==}
+    engines: {node: '>=8'}
+
+  minipass@4.2.8:
+    resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==}
+    engines: {node: '>=8'}
+
+  minipass@5.0.0:
+    resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==}
+    engines: {node: '>=8'}
+
+  minipass@7.1.2:
+    resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
+    engines: {node: '>=16 || 14 >=14.17'}
+
+  minizlib@2.1.2:
+    resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
+    engines: {node: '>= 8'}
+
+  mkdirp-classic@0.5.3:
+    resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
+
+  mkdirp2@1.0.5:
+    resolution: {integrity: sha512-xOE9xbICroUDmG1ye2h4bZ8WBie9EGmACaco8K8cx6RlkJJrxGIqjGqztAI+NMhexXBcdGbSEzI6N3EJPevxZw==}
+
+  mkdirp@1.0.4:
+    resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
+    engines: {node: '>=10'}
+    hasBin: true
+
+  modify-values@1.0.1:
+    resolution: {integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==}
+    engines: {node: '>=0.10.0'}
+
+  module-definition@5.0.1:
+    resolution: {integrity: sha512-kvw3B4G19IXk+BOXnYq/D/VeO9qfHaapMeuS7w7sNUqmGaA6hywdFHMi+VWeR9wUScXM7XjoryTffCZ5B0/8IA==}
+    engines: {node: '>=14'}
+    hasBin: true
+
+  module-lookup-amd@8.0.5:
+    resolution: {integrity: sha512-vc3rYLjDo5Frjox8NZpiyLXsNWJ5BWshztc/5KSOMzpg9k5cHH652YsJ7VKKmtM4SvaxuE9RkrYGhiSjH3Ehow==}
+    engines: {node: '>=14'}
+    hasBin: true
+
+  mrmime@2.0.0:
+    resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==}
+    engines: {node: '>=10'}
+
+  ms@2.0.0:
+    resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
+
+  ms@2.1.3:
+    resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+  multimatch@5.0.0:
+    resolution: {integrity: sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==}
+    engines: {node: '>=10'}
+
+  multistream@4.1.0:
+    resolution: {integrity: sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==}
+
+  mute-stream@0.0.8:
+    resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
+
+  mute-stream@1.0.0:
+    resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==}
+    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+  mz@2.7.0:
+    resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
+
+  nanoid@3.3.7:
+    resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
+    engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+    hasBin: true
+
+  nanoid@5.0.7:
+    resolution: {integrity: sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ==}
+    engines: {node: ^18 || >=20}
+    hasBin: true
+
+  nanostores@0.9.5:
+    resolution: {integrity: sha512-Z+p+g8E7yzaWwOe5gEUB2Ox0rCEeXWYIZWmYvw/ajNYX8DlXdMvMDj8DWfM/subqPAcsf8l8Td4iAwO1DeIIRQ==}
+    engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0}
+
+  napi-build-utils@1.0.2:
+    resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==}
+
+  natural-compare@1.4.0:
+    resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+
+  negotiator@0.6.3:
+    resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
+    engines: {node: '>= 0.6'}
+
+  neo-async@2.6.2:
+    resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
+
+  neotraverse@0.6.18:
+    resolution: {integrity: sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==}
+    engines: {node: '>= 10'}
+
+  nlcst-to-string@3.1.1:
+    resolution: {integrity: sha512-63mVyqaqt0cmn2VcI2aH6kxe1rLAmSROqHMA0i4qqg1tidkfExgpb0FGMikMCn86mw5dFtBtEANfmSSK7TjNHw==}
+
+  nlcst-to-string@4.0.0:
+    resolution: {integrity: sha512-YKLBCcUYKAg0FNlOBT6aI91qFmSiFKiluk655WzPF+DDMA02qIyy8uiRqI8QXtcFpEvll12LpL5MXqEmAZ+dcA==}
+
+  node-abi@3.40.0:
+    resolution: {integrity: sha512-zNy02qivjjRosswoYmPi8hIKJRr8MpQyeKT6qlcq/OnOgA3Rhoae+IYOqsM9V5+JnHWmxKnWOT2GxvtqdtOCXA==}
+    engines: {node: '>=10'}
+
+  node-addon-api@8.0.0:
+    resolution: {integrity: sha512-ipO7rsHEBqa9STO5C5T10fj732ml+5kLN1cAG8/jdHd56ldQeGj3Q7+scUS+VHK/qy1zLEwC4wMK5+yM0btPvw==}
+    engines: {node: ^18 || ^20 || >= 21}
+
+  node-addon-api@8.2.1:
+    resolution: {integrity: sha512-vmEOvxwiH8tlOcv4SyE8RH34rI5/nWVaigUeAUPawC6f0+HoDthwI0vkMu4tbtsZrXq6QXFfrkhjofzKEs5tpA==}
+    engines: {node: ^18 || ^20 || >= 21}
+
+  node-domexception@1.0.0:
+    resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
+    engines: {node: '>=10.5.0'}
+
+  node-fetch@2.6.7:
+    resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==}
+    engines: {node: 4.x || >=6.0.0}
+    peerDependencies:
+      encoding: ^0.1.0
+    peerDependenciesMeta:
+      encoding:
+        optional: true
+
+  node-fetch@2.6.8:
+    resolution: {integrity: sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg==}
+    engines: {node: 4.x || >=6.0.0}
+    peerDependencies:
+      encoding: ^0.1.0
+    peerDependenciesMeta:
+      encoding:
+        optional: true
+
+  node-fetch@3.3.2:
+    resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
+    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+  node-getopt@0.3.2:
+    resolution: {integrity: sha512-yqkmYrMbK1wPrfz7mgeYvA4tBperLg9FQ4S3Sau3nSAkpOA0x0zC8nQ1siBwozy1f4SE8vq2n1WKv99r+PCa1Q==}
+    engines: {node: '>= 0.6.0'}
+
+  node-gyp-build@4.8.2:
+    resolution: {integrity: sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==}
+    hasBin: true
+
+  node-gyp@10.2.0:
+    resolution: {integrity: sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw==}
+    engines: {node: ^16.14.0 || >=18.0.0}
+    hasBin: true
+
+  node-machine-id@1.1.12:
+    resolution: {integrity: sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==}
+
+  node-releases@2.0.18:
+    resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==}
+
+  node-source-walk@6.0.2:
+    resolution: {integrity: sha512-jn9vOIK/nfqoFCcpK89/VCVaLg1IHE6UVfDOzvqmANaJ/rWCTEdH8RZ1V278nv2jr36BJdyQXIAavBLXpzdlag==}
+    engines: {node: '>=14'}
+
+  nopt@7.2.1:
+    resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==}
+    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+    hasBin: true
+
+  normalize-package-data@2.5.0:
+    resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
+
+  normalize-package-data@3.0.3:
+    resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==}
+    engines: {node: '>=10'}
+
+  normalize-package-data@6.0.2:
+    resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==}
+    engines: {node: ^16.14.0 || >=18.0.0}
+
+  normalize-path@3.0.0:
+    resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+    engines: {node: '>=0.10.0'}
+
+  normalize-range@0.1.2:
+    resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
+    engines: {node: '>=0.10.0'}
+
+  npm-bundled@3.0.1:
+    resolution: {integrity: sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==}
+    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+  npm-install-checks@6.3.0:
+    resolution: {integrity: sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==}
+    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+  npm-normalize-package-bin@3.0.1:
+    resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==}
+    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+  npm-package-arg@11.0.2:
+    resolution: {integrity: sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==}
+    engines: {node: ^16.14.0 || >=18.0.0}
+
+  npm-packlist@8.0.2:
+    resolution: {integrity: sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==}
+    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+  npm-pick-manifest@9.1.0:
+    resolution: {integrity: sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==}
+    engines: {node: ^16.14.0 || >=18.0.0}
+
+  npm-registry-fetch@17.1.0:
+    resolution: {integrity: sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==}
+    engines: {node: ^16.14.0 || >=18.0.0}
+
+  npm-run-path@4.0.1:
+    resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
+    engines: {node: '>=8'}
+
+  nx@17.2.8:
+    resolution: {integrity: sha512-rM5zXbuXLEuqQqcjVjClyvHwRJwt+NVImR2A6KFNG40Z60HP6X12wAxxeLHF5kXXTDRU0PFhf/yACibrpbPrAw==}
+    hasBin: true
+    peerDependencies:
+      '@swc-node/register': ^1.6.7
+      '@swc/core': ^1.3.85
+    peerDependenciesMeta:
+      '@swc-node/register':
+        optional: true
+      '@swc/core':
+        optional: true
+
+  object-assign@4.1.1:
+    resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+    engines: {node: '>=0.10.0'}
+
+  object-get@2.1.1:
+    resolution: {integrity: sha512-7n4IpLMzGGcLEMiQKsNR7vCe+N5E9LORFrtNUVy4sO3dj9a3HedZCxEL2T7QuLhcHN1NBuBsMOKaOsAYI9IIvg==}
+
+  object-hash@3.0.0:
+    resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
+    engines: {node: '>= 6'}
+
+  object-inspect@1.13.1:
+    resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==}
+
+  object-inspect@1.13.2:
+    resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==}
+    engines: {node: '>= 0.4'}
+
+  object-keys@1.1.1:
+    resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+    engines: {node: '>= 0.4'}
+
+  object-to-spawn-args@2.0.1:
+    resolution: {integrity: sha512-6FuKFQ39cOID+BMZ3QaphcC8Y4cw6LXBLyIgPU+OhIYwviJamPAn+4mITapnSBQrejB+NNp+FMskhD8Cq+Ys3w==}
+    engines: {node: '>=8.0.0'}
+
+  object.assign@4.1.4:
+    resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==}
+    engines: {node: '>= 0.4'}
+
+  object.assign@4.1.5:
+    resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==}
+    engines: {node: '>= 0.4'}
+
+  object.fromentries@2.0.8:
+    resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==}
+    engines: {node: '>= 0.4'}
+
+  object.groupby@1.0.3:
+    resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==}
+    engines: {node: '>= 0.4'}
+
+  object.values@1.2.0:
+    resolution: {integrity: sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==}
+    engines: {node: '>= 0.4'}
+
+  once@1.4.0:
+    resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+
+  onetime@5.1.2:
+    resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
+    engines: {node: '>=6'}
+
+  onetime@7.0.0:
+    resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
+    engines: {node: '>=18'}
+
+  oniguruma-to-js@0.4.3:
+    resolution: {integrity: sha512-X0jWUcAlxORhOqqBREgPMgnshB7ZGYszBNspP+tS9hPD3l13CdaXcHbgImoHUHlrvGx/7AvFEkTRhAGYh+jzjQ==}
+
+  open@8.4.0:
+    resolution: {integrity: sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==}
+    engines: {node: '>=12'}
+
+  optionator@0.9.3:
+    resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==}
+    engines: {node: '>= 0.8.0'}
+
+  ora@5.4.1:
+    resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
+    engines: {node: '>=10'}
+
+  ora@8.1.0:
+    resolution: {integrity: sha512-GQEkNkH/GHOhPFXcqZs3IDahXEQcQxsSjEkK4KvEEST4t7eNzoMjxTzef+EZ+JluDEV+Raoi3WQ2CflnRdSVnQ==}
+    engines: {node: '>=18'}
+
+  os-tmpdir@1.0.2:
+    resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
+    engines: {node: '>=0.10.0'}
+
+  osc-js@2.4.1:
+    resolution: {integrity: sha512-QlSeRKJclL47FNvO1MUCAAp9frmCF9zcYbnf6R9HpcklAst8ZyX3ISsk1v/Vghr/5GmXn0bhVjFXF9h+hfnl4Q==}
+
+  p-finally@1.0.0:
+    resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==}
+    engines: {node: '>=4'}
+
+  p-is-promise@3.0.0:
+    resolution: {integrity: sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==}
+    engines: {node: '>=8'}
+
+  p-limit@1.3.0:
+    resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==}
+    engines: {node: '>=4'}
+
+  p-limit@2.3.0:
+    resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
+    engines: {node: '>=6'}
+
+  p-limit@3.1.0:
+    resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+    engines: {node: '>=10'}
+
+  p-limit@6.1.0:
+    resolution: {integrity: sha512-H0jc0q1vOzlEk0TqAKXKZxdl7kX3OFUzCnNVUnq5Pc3DGo0kpeaMuPqxQn235HibwBEb0/pm9dgKTjXy66fBkg==}
+    engines: {node: '>=18'}
+
+  p-locate@2.0.0:
+    resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==}
+    engines: {node: '>=4'}
+
+  p-locate@4.1.0:
+    resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
+    engines: {node: '>=8'}
+
+  p-locate@5.0.0:
+    resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+    engines: {node: '>=10'}
+
+  p-map-series@2.1.0:
+    resolution: {integrity: sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==}
+    engines: {node: '>=8'}
+
+  p-map@4.0.0:
+    resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==}
+    engines: {node: '>=10'}
+
+  p-pipe@3.1.0:
+    resolution: {integrity: sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==}
+    engines: {node: '>=8'}
+
+  p-queue@6.6.2:
+    resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==}
+    engines: {node: '>=8'}
+
+  p-queue@8.0.1:
+    resolution: {integrity: sha512-NXzu9aQJTAzbBqOt2hwsR63ea7yvxJc0PwN/zobNAudYfb1B7R08SzB4TsLeSbUCuG467NhnoT0oO6w1qRO+BA==}
+    engines: {node: '>=18'}
+
+  p-reduce@2.1.0:
+    resolution: {integrity: sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==}
+    engines: {node: '>=8'}
+
+  p-timeout@3.2.0:
+    resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==}
+    engines: {node: '>=8'}
+
+  p-timeout@6.1.2:
+    resolution: {integrity: sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ==}
+    engines: {node: '>=14.16'}
+
+  p-try@1.0.0:
+    resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==}
+    engines: {node: '>=4'}
+
+  p-try@2.2.0:
+    resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
+    engines: {node: '>=6'}
+
+  p-waterfall@2.1.1:
+    resolution: {integrity: sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==}
+    engines: {node: '>=8'}
+
+  package-json-from-dist@1.0.1:
+    resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
+
+  pacote@18.0.6:
+    resolution: {integrity: sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==}
+    engines: {node: ^16.14.0 || >=18.0.0}
+    hasBin: true
+
+  parent-module@1.0.1:
+    resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+    engines: {node: '>=6'}
+
+  parse-conflict-json@3.0.1:
+    resolution: {integrity: sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw==}
+    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+  parse-entities@4.0.1:
+    resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==}
+
+  parse-json@4.0.0:
+    resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==}
+    engines: {node: '>=4'}
+
+  parse-json@5.2.0:
+    resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
+    engines: {node: '>=8'}
+
+  parse-latin@5.0.1:
+    resolution: {integrity: sha512-b/K8ExXaWC9t34kKeDV8kGXBkXZ1HCSAZRYE7HR14eA1GlXX5L8iWhs8USJNhQU9q5ci413jCKF0gOyovvyRBg==}
+
+  parse-latin@7.0.0:
+    resolution: {integrity: sha512-mhHgobPPua5kZ98EF4HWiH167JWBfl4pvAIXXdbaVohtK7a6YBOy56kvhCqduqyo/f3yrHFWmqmiMg/BkBkYYQ==}
+
+  parse-path@7.0.0:
+    resolution: {integrity: sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==}
+
+  parse-url@8.1.0:
+    resolution: {integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==}
+
+  parse5@7.2.0:
+    resolution: {integrity: sha512-ZkDsAOcxsUMZ4Lz5fVciOehNcJ+Gb8gTzcA4yl3wnc273BAybYWrQ+Ks/OjCjSEpjvQkDSeZbybK9qj2VHHdGA==}
+
+  path-browserify@1.0.1:
+    resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
+
+  path-exists@3.0.0:
+    resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==}
+    engines: {node: '>=4'}
+
+  path-exists@4.0.0:
+    resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+    engines: {node: '>=8'}
+
+  path-is-absolute@1.0.1:
+    resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+    engines: {node: '>=0.10.0'}
+
+  path-key@3.1.1:
+    resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+    engines: {node: '>=8'}
+
+  path-parse@1.0.7:
+    resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
+  path-scurry@1.11.1:
+    resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
+    engines: {node: '>=16 || 14 >=14.18'}
+
+  path-scurry@1.7.0:
+    resolution: {integrity: sha512-UkZUeDjczjYRE495+9thsgcVgsaCPkaw80slmfVFgllxY+IO8ubTsOpFVjDPROBqJdHfVPUFRHPBV/WciOVfWg==}
+    engines: {node: '>=16 || 14 >=14.17'}
+
+  path-type@3.0.0:
+    resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==}
+    engines: {node: '>=4'}
+
+  path-type@4.0.0:
+    resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
+    engines: {node: '>=8'}
+
+  pathe@1.1.2:
+    resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
+
+  pathval@2.0.0:
+    resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==}
+    engines: {node: '>= 14.16'}
+
+  peggy@3.0.2:
+    resolution: {integrity: sha512-n7chtCbEoGYRwZZ0i/O3t1cPr6o+d9Xx4Zwy2LYfzv0vjchMBU0tO+qYYyvZloBPcgRgzYvALzGWHe609JjEpg==}
+    engines: {node: '>=14'}
+    hasBin: true
+
+  performance-now@2.1.0:
+    resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==}
+
+  picocolors@1.0.0:
+    resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
+
+  picocolors@1.1.1:
+    resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+  picomatch@2.3.1:
+    resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+    engines: {node: '>=8.6'}
+
+  picomatch@4.0.2:
+    resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
+    engines: {node: '>=12'}
+
+  pify@2.3.0:
+    resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
+    engines: {node: '>=0.10.0'}
+
+  pify@3.0.0:
+    resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==}
+    engines: {node: '>=4'}
+
+  pify@4.0.1:
+    resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
+    engines: {node: '>=6'}
+
+  pify@5.0.0:
+    resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==}
+    engines: {node: '>=10'}
+
+  pirates@4.0.5:
+    resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==}
+    engines: {node: '>= 6'}
+
+  pkg-dir@4.2.0:
+    resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
+    engines: {node: '>=8'}
+
+  pkg-fetch@3.4.2:
+    resolution: {integrity: sha512-0+uijmzYcnhC0hStDjm/cl2VYdrmVVBpe7Q8k9YBojxmR5tG8mvR9/nooQq3QSXiQqORDVOTY3XqMEqJVIzkHA==}
+    hasBin: true
+
+  pkg@5.8.1:
+    resolution: {integrity: sha512-CjBWtFStCfIiT4Bde9QpJy0KeH19jCfwZRJqHFDFXfhUklCx8JoFmMj3wgnEYIwGmZVNkhsStPHEOnrtrQhEXA==}
+    hasBin: true
+    peerDependencies:
+      node-notifier: '>=9.0.1'
+    peerDependenciesMeta:
+      node-notifier:
+        optional: true
+
+  possible-typed-array-names@1.0.0:
+    resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==}
+    engines: {node: '>= 0.4'}
+
+  postcss-import@15.1.0:
+    resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
+    engines: {node: '>=14.0.0'}
+    peerDependencies:
+      postcss: ^8.0.0
+
+  postcss-js@4.0.1:
+    resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
+    engines: {node: ^12 || ^14 || >= 16}
+    peerDependencies:
+      postcss: ^8.4.21
+
+  postcss-load-config@4.0.2:
+    resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
+    engines: {node: '>= 14'}
+    peerDependencies:
+      postcss: '>=8.0.9'
+      ts-node: '>=9.0.0'
+    peerDependenciesMeta:
+      postcss:
+        optional: true
+      ts-node:
+        optional: true
+
+  postcss-nested@6.0.1:
+    resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==}
+    engines: {node: '>=12.0'}
+    peerDependencies:
+      postcss: ^8.2.14
+
+  postcss-selector-parser@6.0.10:
+    resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==}
+    engines: {node: '>=4'}
+
+  postcss-selector-parser@6.0.11:
+    resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==}
+    engines: {node: '>=4'}
+
+  postcss-selector-parser@6.1.2:
+    resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==}
+    engines: {node: '>=4'}
+
+  postcss-value-parser@4.2.0:
+    resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
+
+  postcss-values-parser@6.0.2:
+    resolution: {integrity: sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==}
+    engines: {node: '>=10'}
+    peerDependencies:
+      postcss: ^8.2.9
+
+  postcss@8.4.32:
+    resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==}
+    engines: {node: ^10 || ^12 || >=14}
+
+  postcss@8.4.47:
+    resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==}
+    engines: {node: ^10 || ^12 || >=14}
+
+  prebuild-install@7.1.1:
+    resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==}
+    engines: {node: '>=10'}
+    hasBin: true
+
+  precinct@11.0.5:
+    resolution: {integrity: sha512-oHSWLC8cL/0znFhvln26D14KfCQFFn4KOLSw6hmLhd+LQ2SKt9Ljm89but76Pc7flM9Ty1TnXyrA2u16MfRV3w==}
+    engines: {node: ^14.14.0 || >=16.0.0}
+    hasBin: true
+
+  preferred-pm@4.0.0:
+    resolution: {integrity: sha512-gYBeFTZLu055D8Vv3cSPox/0iTPtkzxpLroSYYA7WXgRi31WCJ51Uyl8ZiPeUUjyvs2MBzK+S8v9JVUgHU/Sqw==}
+    engines: {node: '>=18.12'}
+
+  prelude-ls@1.2.1:
+    resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
+    engines: {node: '>= 0.8.0'}
+
+  prettier@3.3.3:
+    resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==}
+    engines: {node: '>=14'}
+    hasBin: true
+
+  pretty-bytes@5.6.0:
+    resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==}
+    engines: {node: '>=6'}
+
+  pretty-bytes@6.1.1:
+    resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==}
+    engines: {node: ^14.13.1 || >=16.0.0}
+
+  pretty-format@29.7.0:
+    resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
+    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+  prismjs@1.29.0:
+    resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==}
+    engines: {node: '>=6'}
+
+  proc-log@4.2.0:
+    resolution: {integrity: sha512-g8+OnU/L2v+wyiVK+D5fA34J7EH8jZ8DDlvwhRCMxmMj7UCBvxiO1mGeN+36JXIKF4zevU4kRBd8lVgG9vLelA==}
+    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+  process-nextick-args@2.0.1:
+    resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
+
+  proggy@2.0.0:
+    resolution: {integrity: sha512-69agxLtnI8xBs9gUGqEnK26UfiexpHy+KUpBQWabiytQjnn5wFY8rklAi7GRfABIuPNnQ/ik48+LGLkYYJcy4A==}
+    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+  progress@2.0.3:
+    resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
+    engines: {node: '>=0.4.0'}
+
+  promise-all-reject-late@1.0.1:
+    resolution: {integrity: sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==}
+
+  promise-call-limit@3.0.2:
+    resolution: {integrity: sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw==}
+
+  promise-inflight@1.0.1:
+    resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==}
+    peerDependencies:
+      bluebird: '*'
+    peerDependenciesMeta:
+      bluebird:
+        optional: true
+
+  promise-retry@2.0.1:
+    resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==}
+    engines: {node: '>=10'}
+
+  prompts@2.4.2:
+    resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
+    engines: {node: '>= 6'}
+
+  promzard@1.0.2:
+    resolution: {integrity: sha512-2FPputGL+mP3jJ3UZg/Dl9YOkovB7DX0oOr+ck5QbZ5MtORtds8k/BZdn+02peDLI8/YWbmzx34k5fA+fHvCVQ==}
+    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+  property-information@6.5.0:
+    resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==}
+
+  protocols@2.0.1:
+    resolution: {integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==}
+
+  proxy-from-env@1.1.0:
+    resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
+
+  pump@3.0.0:
+    resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
+
+  punycode.js@2.3.1:
+    resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==}
+    engines: {node: '>=6'}
+
+  punycode@2.3.1:
+    resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+    engines: {node: '>=6'}
+
+  queue-microtask@1.2.3:
+    resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+
+  quick-lru@4.0.1:
+    resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==}
+    engines: {node: '>=8'}
+
+  quote-unquote@1.0.0:
+    resolution: {integrity: sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==}
+
+  raf-loop@1.1.3:
+    resolution: {integrity: sha512-fcIuuIdjbD6OB0IFw4d+cjqdrzDorKkIpwOiSnfU4Tht5PTFiJutR8hnCOGslYqZDyIzwpF5WnwbnTTuo9uUUA==}
+
+  raf@3.4.1:
+    resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==}
+
+  rambda@7.4.0:
+    resolution: {integrity: sha512-A9hihu7dUTLOUCM+I8E61V4kRXnN4DwYeK0DwCBydC1MqNI1PidyAtbtpsJlBBzK4icSctEcCQ1bGcLpBuETUQ==}
+
+  randombytes@2.1.0:
+    resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+
+  rc@1.2.8:
+    resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
+    hasBin: true
+
+  react-dom@18.3.1:
+    resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==}
+    peerDependencies:
+      react: ^18.3.1
+
+  react-hook-inview@4.5.1:
+    resolution: {integrity: sha512-ceb2tjSNnBIQ19TphSlxrjy85dfWEoqCb1kTquOM0li+Myzn0cBDi6WzItFf9vyQbZAXJR7LaoESLBXvMu6clA==}
+    peerDependencies:
+      react: '>= 16.8.0'
+      react-dom: '>= 16.8.0'
+
+  react-is@18.3.1:
+    resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
+
+  react-lite-youtube-embed@2.4.0:
+    resolution: {integrity: sha512-Xo6cM1zPlROvvM97JkqQIoXstlQDaC4+DawmM7BB7Hh1cXrkBHEGq1iJlQxBTUWAUklmpcC7ph7qg7CztXtABQ==}
+    peerDependencies:
+      react: '>=18.2.0'
+      react-dom: '>=18.2.0'
+
+  react-refresh@0.14.2:
+    resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==}
+    engines: {node: '>=0.10.0'}
+
+  react@18.3.1:
+    resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==}
+    engines: {node: '>=0.10.0'}
+
+  read-cache@1.0.0:
+    resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
+
+  read-cmd-shim@4.0.0:
+    resolution: {integrity: sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==}
+    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+  read-package-json-fast@3.0.2:
+    resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==}
+    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+  read-pkg-up@3.0.0:
+    resolution: {integrity: sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==}
+    engines: {node: '>=4'}
+
+  read-pkg-up@7.0.1:
+    resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
+    engines: {node: '>=8'}
+
+  read-pkg@3.0.0:
+    resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==}
+    engines: {node: '>=4'}
+
+  read-pkg@5.2.0:
+    resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==}
+    engines: {node: '>=8'}
+
+  read@3.0.1:
+    resolution: {integrity: sha512-SLBrDU/Srs/9EoWhU5GdbAoxG1GzpQHo/6qiGItaoLJ1thmYpcNIM1qISEUvyHBzfGlWIyd6p2DNi1oV1VmAuw==}
+    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+  readable-stream@1.1.14:
+    resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==}
+
+  readable-stream@2.3.7:
+    resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==}
+
+  readable-stream@3.6.0:
+    resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==}
+    engines: {node: '>= 6'}
+
+  readdirp@3.6.0:
+    resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+    engines: {node: '>=8.10.0'}
+
+  recma-build-jsx@1.0.0:
+    resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==}
+
+  recma-jsx@1.0.0:
+    resolution: {integrity: sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q==}
+
+  recma-parse@1.0.0:
+    resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==}
+
+  recma-stringify@1.0.0:
+    resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==}
+
+  redent@3.0.0:
+    resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==}
+    engines: {node: '>=8'}
+
+  reduce-flatten@1.0.1:
+    resolution: {integrity: sha512-j5WfFJfc9CoXv/WbwVLHq74i/hdTUpy+iNC534LxczMRP67vJeK3V9JOdnL0N1cIRbn9mYhE2yVjvvKXDxvNXQ==}
+    engines: {node: '>=0.10.0'}
+
+  reduce-flatten@3.0.1:
+    resolution: {integrity: sha512-bYo+97BmUUOzg09XwfkwALt4PQH1M5L0wzKerBt6WLm3Fhdd43mMS89HiT1B9pJIqko/6lWx3OnV4J9f2Kqp5Q==}
+    engines: {node: '>=8'}
+
+  reduce-unique@2.0.1:
+    resolution: {integrity: sha512-x4jH/8L1eyZGR785WY+ePtyMNhycl1N2XOLxhCbzZFaqF4AXjLzqSxa2UHgJ2ZVR/HHyPOvl1L7xRnW8ye5MdA==}
+    engines: {node: '>=6'}
+
+  reduce-without@1.0.1:
+    resolution: {integrity: sha512-zQv5y/cf85sxvdrKPlfcRzlDn/OqKFThNimYmsS3flmkioKvkUGn2Qg9cJVoQiEvdxFGLE0MQER/9fZ9sUqdxg==}
+    engines: {node: '>=0.10.0'}
+
+  regenerate-unicode-properties@10.2.0:
+    resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==}
+    engines: {node: '>=4'}
+
+  regenerate@1.4.2:
+    resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
+
+  regenerator-runtime@0.13.11:
+    resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
+
+  regenerator-runtime@0.14.1:
+    resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+  regenerator-transform@0.15.2:
+    resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==}
+
+  regex@4.3.3:
+    resolution: {integrity: sha512-r/AadFO7owAq1QJVeZ/nq9jNS1vyZt+6t1p/E59B56Rn2GCya+gr1KSyOzNL/er+r+B7phv5jG2xU2Nz1YkmJg==}
+
+  regexp.prototype.flags@1.5.1:
+    resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==}
+    engines: {node: '>= 0.4'}
+
+  regexp.prototype.flags@1.5.3:
+    resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==}
+    engines: {node: '>= 0.4'}
+
+  regexpp@3.2.0:
+    resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==}
+    engines: {node: '>=8'}
+
+  regexpu-core@6.1.1:
+    resolution: {integrity: sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==}
+    engines: {node: '>=4'}
+
+  regjsgen@0.8.0:
+    resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==}
+
+  regjsparser@0.11.1:
+    resolution: {integrity: sha512-1DHODs4B8p/mQHU9kr+jv8+wIC9mtG4eBHxWxIq5mhjE3D5oORhCc6deRKzTjs9DcfRFmj9BHSDguZklqCGFWQ==}
+    hasBin: true
+
+  regl@1.7.0:
+    resolution: {integrity: sha512-bEAtp/qrtKucxXSJkD4ebopFZYP0q1+3Vb2WECWv/T8yQEgKxDxJ7ztO285tAMaYZVR6mM1GgI6CCn8FROtL1w==}
+
+  rehype-autolink-headings@7.1.0:
+    resolution: {integrity: sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw==}
+
+  rehype-parse@9.0.1:
+    resolution: {integrity: sha512-ksCzCD0Fgfh7trPDxr2rSylbwq9iYDkSn8TCDmEJ49ljEUBxDVCzCHv7QNzZOfODanX4+bWQ4WZqLCRWYLfhag==}
+
+  rehype-raw@7.0.0:
+    resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==}
+
+  rehype-recma@1.0.0:
+    resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==}
+
+  rehype-slug@6.0.0:
+    resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==}
+
+  rehype-stringify@10.0.1:
+    resolution: {integrity: sha512-k9ecfXHmIPuFVI61B9DeLPN0qFHfawM6RsuX48hoqlaKSF61RskNjSm1lI8PhBEM0MRdLxVVm4WmTqJQccH9mA==}
+
+  rehype-urls@1.2.0:
+    resolution: {integrity: sha512-+ygQd999ts0DxhTqttYmH0w0jK2ysE5lLjaJkSI4xd63XUB+g+TYXZtwXngr38QDMIVizquB2Bo35JNVggCL3A==}
+
+  rehype@13.0.2:
+    resolution: {integrity: sha512-j31mdaRFrwFRUIlxGeuPXXKWQxet52RBQRvCmzl5eCefn/KGbomK5GMHNMsOJf55fgo3qw5tST5neDuarDYR2A==}
+
+  remark-gfm@4.0.0:
+    resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==}
+
+  remark-mdx@3.1.0:
+    resolution: {integrity: sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==}
+
+  remark-parse@11.0.0:
+    resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==}
+
+  remark-rehype@11.1.1:
+    resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==}
+
+  remark-smartypants@2.1.0:
+    resolution: {integrity: sha512-qoF6Vz3BjU2tP6OfZqHOvCU0ACmu/6jhGaINSQRI9mM7wCxNQTKB3JUAN4SVoN2ybElEDTxBIABRep7e569iJw==}
+    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+  remark-smartypants@3.0.2:
+    resolution: {integrity: sha512-ILTWeOriIluwEvPjv67v7Blgrcx+LZOkAUVtKI3putuhlZm84FnqDORNXPPm+HY3NdZOMhyDwZ1E+eZB/Df5dA==}
+    engines: {node: '>=16.0.0'}
+
+  remark-stringify@11.0.0:
+    resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
+
+  remark-toc@9.0.0:
+    resolution: {integrity: sha512-KJ9txbo33GjDAV1baHFze7ij4G8c7SGYoY8Kzsm2gzFpbhL/bSoVpMMzGa3vrNDSWASNd/3ppAqL7cP2zD6JIA==}
+
+  remove-trailing-separator@1.1.0:
+    resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==}
+
+  replace-ext@1.0.1:
+    resolution: {integrity: sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==}
+    engines: {node: '>= 0.10'}
+
+  require-directory@2.1.1:
+    resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
+    engines: {node: '>=0.10.0'}
+
+  require-from-string@2.0.2:
+    resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
+    engines: {node: '>=0.10.0'}
+
+  require-main-filename@2.0.0:
+    resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
+
+  requirejs-config-file@4.0.0:
+    resolution: {integrity: sha512-jnIre8cbWOyvr8a5F2KuqBnY+SDA4NXr/hzEZJG79Mxm2WiFQz2dzhC8ibtPJS7zkmBEl1mxSwp5HhC1W4qpxw==}
+    engines: {node: '>=10.13.0'}
+
+  requirejs@2.3.7:
+    resolution: {integrity: sha512-DouTG8T1WanGok6Qjg2SXuCMzszOo0eHeH9hDZ5Y4x8Je+9JB38HdTLT4/VA8OaUhBa0JPVHJ0pyBkM1z+pDsw==}
+    engines: {node: '>=0.4.0'}
+    hasBin: true
+
+  requizzle@0.2.4:
+    resolution: {integrity: sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==}
+
+  resolve-cwd@3.0.0:
+    resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==}
+    engines: {node: '>=8'}
+
+  resolve-dependency-path@3.0.2:
+    resolution: {integrity: sha512-Tz7zfjhLfsvR39ADOSk9us4421J/1ztVBo4rWUkF38hgHK5m0OCZ3NxFVpqHRkjctnwVa15igEUHFJp8MCS7vA==}
+    engines: {node: '>=14'}
+
+  resolve-from@4.0.0:
+    resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+    engines: {node: '>=4'}
+
+  resolve-from@5.0.0:
+    resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
+    engines: {node: '>=8'}
+
+  resolve@1.22.2:
+    resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==}
+    hasBin: true
+
+  resolve@1.22.8:
+    resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
+    hasBin: true
+
+  restore-cursor@3.1.0:
+    resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
+    engines: {node: '>=8'}
+
+  restore-cursor@5.1.0:
+    resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==}
+    engines: {node: '>=18'}
+
+  retext-latin@3.1.0:
+    resolution: {integrity: sha512-5MrD1tuebzO8ppsja5eEu+ZbBeUNCjoEarn70tkXOS7Bdsdf6tNahsv2bY0Z8VooFF6cw7/6S+d3yI/TMlMVVQ==}
+
+  retext-latin@4.0.0:
+    resolution: {integrity: sha512-hv9woG7Fy0M9IlRQloq/N6atV82NxLGveq+3H2WOi79dtIYWN8OaxogDm77f8YnVXJL2VD3bbqowu5E3EMhBYA==}
+
+  retext-smartypants@5.2.0:
+    resolution: {integrity: sha512-Do8oM+SsjrbzT2UNIKgheP0hgUQTDDQYyZaIY3kfq0pdFzoPk+ZClYJ+OERNXveog4xf1pZL4PfRxNoVL7a/jw==}
+
+  retext-smartypants@6.2.0:
+    resolution: {integrity: sha512-kk0jOU7+zGv//kfjXEBjdIryL1Acl4i9XNkHxtM7Tm5lFiCog576fjNC9hjoR7LTKQ0DsPWy09JummSsH1uqfQ==}
+
+  retext-stringify@3.1.0:
+    resolution: {integrity: sha512-767TLOaoXFXyOnjx/EggXlb37ZD2u4P1n0GJqVdpipqACsQP+20W+BNpMYrlJkq7hxffnFk+jc6mAK9qrbuB8w==}
+
+  retext-stringify@4.0.0:
+    resolution: {integrity: sha512-rtfN/0o8kL1e+78+uxPTqu1Klt0yPzKuQ2BfWwwfgIUSayyzxpM1PJzkKt4V8803uB9qSy32MvI7Xep9khTpiA==}
+
+  retext@8.1.0:
+    resolution: {integrity: sha512-N9/Kq7YTn6ZpzfiGW45WfEGJqFf1IM1q8OsRa1CGzIebCJBNCANDRmOrholiDRGKo/We7ofKR4SEvcGAWEMD3Q==}
+
+  retext@9.0.0:
+    resolution: {integrity: sha512-sbMDcpHCNjvlheSgMfEcVrZko3cDzdbe1x/e7G66dFp0Ff7Mldvi2uv6JkJQzdRcvLYE8CA8Oe8siQx8ZOgTcA==}
+
+  retry@0.12.0:
+    resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==}
+    engines: {node: '>= 4'}
+
+  reusify@1.0.4:
+    resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
+    engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+  right-now@1.0.0:
+    resolution: {integrity: sha512-DA8+YS+sMIVpbsuKgy+Z67L9Lxb1p05mNxRpDPNksPDEFir4vmBlUtuN9jkTGn9YMMdlBuK7XQgFiz6ws+yhSg==}
+
+  rimraf@3.0.2:
+    resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
+    deprecated: Rimraf versions prior to v4 are no longer supported
+    hasBin: true
+
+  rimraf@4.4.1:
+    resolution: {integrity: sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==}
+    engines: {node: '>=14'}
+    hasBin: true
+
+  rollup-plugin-terser@7.0.2:
+    resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==}
+    deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser
+    peerDependencies:
+      rollup: ^2.0.0
+
+  rollup-plugin-visualizer@5.12.0:
+    resolution: {integrity: sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ==}
+    engines: {node: '>=14'}
+    hasBin: true
+    peerDependencies:
+      rollup: 2.x || 3.x || 4.x
+    peerDependenciesMeta:
+      rollup:
+        optional: true
+
+  rollup@2.79.2:
+    resolution: {integrity: sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==}
+    engines: {node: '>=10.0.0'}
+    hasBin: true
+
+  rollup@4.24.0:
+    resolution: {integrity: sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==}
+    engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+    hasBin: true
+
+  run-async@2.4.1:
+    resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
+    engines: {node: '>=0.12.0'}
+
+  run-parallel@1.2.0:
+    resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+
+  rxjs@7.8.0:
+    resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==}
+
+  safe-array-concat@1.0.1:
+    resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==}
+    engines: {node: '>=0.4'}
+
+  safe-array-concat@1.1.2:
+    resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==}
+    engines: {node: '>=0.4'}
+
+  safe-buffer@5.1.2:
+    resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
+
+  safe-buffer@5.2.1:
+    resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+  safe-regex-test@1.0.0:
+    resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==}
+
+  safe-regex-test@1.0.3:
+    resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==}
+    engines: {node: '>= 0.4'}
+
+  safer-buffer@2.1.2:
+    resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+
+  sass-lookup@5.0.1:
+    resolution: {integrity: sha512-t0X5PaizPc2H4+rCwszAqHZRtr4bugo4pgiCvrBFvIX0XFxnr29g77LJcpyj9A0DcKf7gXMLcgvRjsonYI6x4g==}
+    engines: {node: '>=14'}
+    hasBin: true
+
+  scheduler@0.23.2:
+    resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==}
+
+  search-insights@2.13.0:
+    resolution: {integrity: sha512-Orrsjf9trHHxFRuo9/rzm0KIWmgzE8RMlZMzuhZOJ01Rnz3D0YBAe+V6473t6/H6c7irs6Lt48brULAiRWb3Vw==}
+
+  section-matter@1.0.0:
+    resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==}
+    engines: {node: '>=4'}
+
+  semver@5.7.2:
+    resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
+    hasBin: true
+
+  semver@6.3.1:
+    resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+    hasBin: true
+
+  semver@7.5.3:
+    resolution: {integrity: sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==}
+    engines: {node: '>=10'}
+    hasBin: true
+
+  semver@7.5.4:
+    resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
+    engines: {node: '>=10'}
+    hasBin: true
+
+  semver@7.6.3:
+    resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
+    engines: {node: '>=10'}
+    hasBin: true
+
+  serialize-javascript@4.0.0:
+    resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==}
+
+  set-blocking@2.0.0:
+    resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
+
+  set-function-length@1.1.1:
+    resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==}
+    engines: {node: '>= 0.4'}
+
+  set-function-length@1.2.2:
+    resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
+    engines: {node: '>= 0.4'}
+
+  set-function-name@2.0.1:
+    resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==}
+    engines: {node: '>= 0.4'}
+
+  set-function-name@2.0.2:
+    resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
+    engines: {node: '>= 0.4'}
+
+  sfumato@0.1.2:
+    resolution: {integrity: sha512-j2s5BLUS5VUNtaK1l+v+yal3XjjV7JXCQIwE5Xs4yiQ3HJ+2Fc/dd3IkkrVHn0AJO2epShSWVoP3GnE0TvPdMg==}
+
+  shallow-clone@3.0.1:
+    resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==}
+    engines: {node: '>=8'}
+
+  sharp@0.33.5:
+    resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==}
+    engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
+
+  shebang-command@2.0.0:
+    resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+    engines: {node: '>=8'}
+
+  shebang-regex@3.0.0:
+    resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+    engines: {node: '>=8'}
+
+  shiki@1.22.0:
+    resolution: {integrity: sha512-/t5LlhNs+UOKQCYBtl5ZsH/Vclz73GIqT2yQsCBygr8L/ppTdmpL4w3kPLoZJbMKVWtoG77Ue1feOjZfDxvMkw==}
+
+  side-channel@1.0.4:
+    resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
+
+  side-channel@1.0.6:
+    resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==}
+    engines: {node: '>= 0.4'}
+
+  siginfo@2.0.0:
+    resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
+
+  signal-exit@3.0.7:
+    resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+
+  signal-exit@4.1.0:
+    resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
+    engines: {node: '>=14'}
+
+  sigstore@2.3.1:
+    resolution: {integrity: sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==}
+    engines: {node: ^16.14.0 || >=18.0.0}
+
+  simple-concat@1.0.1:
+    resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==}
+
+  simple-get@4.0.1:
+    resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==}
+
+  simple-swizzle@0.2.2:
+    resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==}
+
+  sirv@2.0.4:
+    resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==}
+    engines: {node: '>= 10'}
+
+  sisteransi@1.0.5:
+    resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
+
+  slash@3.0.0:
+    resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
+    engines: {node: '>=8'}
+
+  smart-buffer@4.2.0:
+    resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
+    engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
+
+  socks-proxy-agent@8.0.4:
+    resolution: {integrity: sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==}
+    engines: {node: '>= 14'}
+
+  socks@2.8.3:
+    resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==}
+    engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
+
+  sort-array@5.0.0:
+    resolution: {integrity: sha512-Sg9MzajSGprcSrMIxsXyNT0e0JB47RJRfJspC+7co4Z5BdNsNl8FmWI+lXEpyKq+vkMG6pHgAhqyCO+bkDTfFQ==}
+    engines: {node: '>=12.17'}
+    peerDependencies:
+      '@75lb/nature': ^0.1.1
+    peerDependenciesMeta:
+      '@75lb/nature':
+        optional: true
+
+  sort-keys@2.0.0:
+    resolution: {integrity: sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==}
+    engines: {node: '>=4'}
+
+  soundfont2@0.4.0:
+    resolution: {integrity: sha512-537WiurDBRbDLVhJMxXLE06D6yWxJCidfPClnibZ0f8dKMDpv+0fIfwCQ8pELE0JqKX05SOJosNJgKzQobaAEA==}
+
+  source-map-generator@0.8.0:
+    resolution: {integrity: sha512-psgxdGMwl5MZM9S3FWee4EgsEaIjahYV5AzGnwUvPhWeITz/j6rKpysQHlQ4USdxvINlb8lKfWGIXwfkrgtqkA==}
+    engines: {node: '>= 10'}
+
+  source-map-js@1.0.2:
+    resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
+    engines: {node: '>=0.10.0'}
+
+  source-map-js@1.2.1:
+    resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+    engines: {node: '>=0.10.0'}
+
+  source-map-support@0.5.21:
+    resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+  source-map@0.5.7:
+    resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==}
+    engines: {node: '>=0.10.0'}
+
+  source-map@0.6.1:
+    resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+    engines: {node: '>=0.10.0'}
+
+  source-map@0.7.4:
+    resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
+    engines: {node: '>= 8'}
+
+  source-map@0.8.0-beta.0:
+    resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
+    engines: {node: '>= 8'}
+
+  sourcemap-codec@1.4.8:
+    resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
+    deprecated: Please use @jridgewell/sourcemap-codec instead
+
+  space-separated-tokens@2.0.2:
+    resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
+
+  spdx-correct@3.1.1:
+    resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==}
+
+  spdx-exceptions@2.3.0:
+    resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==}
+
+  spdx-expression-parse@3.0.1:
+    resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
+
+  spdx-license-ids@3.0.12:
+    resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==}
+
+  split2@3.2.2:
+    resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==}
+
+  split@1.0.1:
+    resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==}
+
+  sprintf-js@1.0.3:
+    resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
+
+  sprintf-js@1.1.3:
+    resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==}
+
+  ssri@10.0.6:
+    resolution: {integrity: sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==}
+    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+  stackback@0.0.2:
+    resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
+
+  standardized-audio-context@25.3.37:
+    resolution: {integrity: sha512-lr0+RH/IJXYMts95oYKIJ+orTmstOZN3GXWVGmlkbMj8OLahREkRh7DhNGLYgBGDkBkhhc4ev5pYGSFN3gltHw==}
+
+  std-env@3.7.0:
+    resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==}
+
+  stdin-discarder@0.2.2:
+    resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==}
+    engines: {node: '>=18'}
+
+  stdopt@2.2.0:
+    resolution: {integrity: sha512-D/p41NgXOkcj1SeGhfXOwv9z1K6EV3sjAUY5aeepVbgEHv7DpKWLTjhjScyzMWAQCAgUQys1mjH0eArm4cjRGw==}
+
+  stream-connect@1.0.2:
+    resolution: {integrity: sha512-68Kl+79cE0RGKemKkhxTSg8+6AGrqBt+cbZAXevg2iJ6Y3zX4JhA/sZeGzLpxW9cXhmqAcE7KnJCisUmIUfnFQ==}
+    engines: {node: '>=0.10.0'}
+    deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
+
+  stream-meter@1.0.4:
+    resolution: {integrity: sha512-4sOEtrbgFotXwnEuzzsQBYEV1elAeFSO8rSGeTwabuX1RRn/kEq9JVH7I0MRBhKVRR0sJkr0M0QCH7yOLf9fhQ==}
+
+  stream-parser@0.3.1:
+    resolution: {integrity: sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==}
+
+  stream-transform@3.3.2:
+    resolution: {integrity: sha512-v64PUnPy9Qw94NGuaEMo+9RHQe4jTBYf+NkTtqkCgeuiNo8NlL0LtLR7fkKWNVFtp3RhIm5Dlxkgm5uz7TDimQ==}
+
+  stream-via@1.0.4:
+    resolution: {integrity: sha512-DBp0lSvX5G9KGRDTkR/R+a29H+Wk2xItOF+MpZLLNDWbEV9tGPnqLPxHEYjmiz8xGtJHRIqmI+hCjmNzqoA4nQ==}
+    engines: {node: '>=0.10.0'}
+
+  string-width@2.1.1:
+    resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==}
+    engines: {node: '>=4'}
+
+  string-width@4.2.3:
+    resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+    engines: {node: '>=8'}
+
+  string-width@5.1.2:
+    resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
+    engines: {node: '>=12'}
+
+  string-width@7.2.0:
+    resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
+    engines: {node: '>=18'}
+
+  string.prototype.matchall@4.0.11:
+    resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==}
+    engines: {node: '>= 0.4'}
+
+  string.prototype.trim@1.2.8:
+    resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==}
+    engines: {node: '>= 0.4'}
+
+  string.prototype.trim@1.2.9:
+    resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==}
+    engines: {node: '>= 0.4'}
+
+  string.prototype.trimend@1.0.8:
+    resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==}
+
+  string.prototype.trimstart@1.0.7:
+    resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==}
+
+  string.prototype.trimstart@1.0.8:
+    resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
+    engines: {node: '>= 0.4'}
+
+  string_decoder@0.10.31:
+    resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==}
+
+  string_decoder@1.1.1:
+    resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
+
+  string_decoder@1.3.0:
+    resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+
+  stringify-entities@4.0.4:
+    resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==}
+
+  stringify-object@3.3.0:
+    resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==}
+    engines: {node: '>=4'}
+
+  strip-ansi@4.0.0:
+    resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==}
+    engines: {node: '>=4'}
+
+  strip-ansi@6.0.1:
+    resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+    engines: {node: '>=8'}
+
+  strip-ansi@7.1.0:
+    resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
+    engines: {node: '>=12'}
+
+  strip-bom-string@1.0.0:
+    resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==}
+    engines: {node: '>=0.10.0'}
+
+  strip-bom@3.0.0:
+    resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
+    engines: {node: '>=4'}
+
+  strip-bom@4.0.0:
+    resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==}
+    engines: {node: '>=8'}
+
+  strip-comments@2.0.1:
+    resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==}
+    engines: {node: '>=10'}
+
+  strip-final-newline@2.0.0:
+    resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
+    engines: {node: '>=6'}
+
+  strip-indent@3.0.0:
+    resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
+    engines: {node: '>=8'}
+
+  strip-json-comments@2.0.1:
+    resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
+    engines: {node: '>=0.10.0'}
+
+  strip-json-comments@3.1.1:
+    resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+    engines: {node: '>=8'}
+
+  strnum@1.0.5:
+    resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==}
+
+  strong-log-transformer@2.1.0:
+    resolution: {integrity: sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==}
+    engines: {node: '>=4'}
+    hasBin: true
+
+  style-mod@4.0.0:
+    resolution: {integrity: sha512-OPhtyEjyyN9x3nhPsu76f52yUGXiZcgvsrFVtvTkyGRQJ0XK+GPc6ov1z+lRpbeabka+MYEQxOYRnt5nF30aMw==}
+
+  style-mod@4.1.0:
+    resolution: {integrity: sha512-Ca5ib8HrFn+f+0n4N4ScTIA9iTOQ7MaGS1ylHcoVqW9J7w2w8PzN6g9gKmTYgGEBH8e120+RCmhpje6jC5uGWA==}
+
+  style-to-object@0.4.4:
+    resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==}
+
+  style-to-object@1.0.8:
+    resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==}
+
+  stylus-lookup@5.0.1:
+    resolution: {integrity: sha512-tLtJEd5AGvnVy4f9UHQMw4bkJJtaAcmo54N+ovQBjDY3DuWyK9Eltxzr5+KG0q4ew6v2EHyuWWNnHeiw/Eo7rQ==}
+    engines: {node: '>=14'}
+    hasBin: true
+
+  sucrase@3.32.0:
+    resolution: {integrity: sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==}
+    engines: {node: '>=8'}
+    hasBin: true
+
+  supports-color@5.5.0:
+    resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
+    engines: {node: '>=4'}
+
+  supports-color@7.2.0:
+    resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+    engines: {node: '>=8'}
+
+  supports-preserve-symlinks-flag@1.0.0:
+    resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+    engines: {node: '>= 0.4'}
+
+  table-layout@0.4.5:
+    resolution: {integrity: sha512-zTvf0mcggrGeTe/2jJ6ECkJHAQPIYEwDoqsiqBjI24mvRmQbInK5jq33fyypaCBxX08hMkfmdOqj6haT33EqWw==}
+    engines: {node: '>=4.0.0'}
+
+  tailwindcss@3.4.14:
+    resolution: {integrity: sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==}
+    engines: {node: '>=14.0.0'}
+    hasBin: true
+
+  tapable@2.2.1:
+    resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
+    engines: {node: '>=6'}
+
+  tar-fs@2.1.1:
+    resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==}
+
+  tar-stream@2.2.0:
+    resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
+    engines: {node: '>=6'}
+
+  tar@6.2.1:
+    resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==}
+    engines: {node: '>=10'}
+
+  temp-dir@1.0.0:
+    resolution: {integrity: sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==}
+    engines: {node: '>=4'}
+
+  temp-dir@2.0.0:
+    resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==}
+    engines: {node: '>=8'}
+
+  temp-path@1.0.0:
+    resolution: {integrity: sha512-TvmyH7kC6ZVTYkqCODjJIbgvu0FKiwQpZ4D1aknE7xpcDf/qEOB8KZEK5ef2pfbVoiBhNWs3yx4y+ESMtNYmlg==}
+
+  tempy@0.6.0:
+    resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==}
+    engines: {node: '>=10'}
+
+  terser@5.36.0:
+    resolution: {integrity: sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==}
+    engines: {node: '>=10'}
+    hasBin: true
+
+  test-value@2.1.0:
+    resolution: {integrity: sha512-+1epbAxtKeXttkGFMTX9H42oqzOTufR1ceCF+GYA5aOmvaPq9wd4PUS8329fn2RRLGNeUkgRLnVpycjx8DsO2w==}
+    engines: {node: '>=0.10.0'}
+
+  test-value@3.0.0:
+    resolution: {integrity: sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==}
+    engines: {node: '>=4.0.0'}
+
+  text-encoding-shim@1.0.5:
+    resolution: {integrity: sha512-H7yYW+jRn4yhu60ygZ2f/eMhXPITRt4QSUTKzLm+eCaDsdX8avmgWpmtmHAzesjBVUTAypz9odu5RKUjX5HNYA==}
+
+  text-extensions@1.9.0:
+    resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==}
+    engines: {node: '>=0.10'}
+
+  text-table@0.2.0:
+    resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
+
+  thenify-all@1.6.0:
+    resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
+    engines: {node: '>=0.8'}
+
+  thenify@3.3.1:
+    resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
+
+  through2@2.0.5:
+    resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==}
+
+  through@2.3.8:
+    resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+
+  tinybench@2.9.0:
+    resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
+
+  tinyexec@0.3.1:
+    resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==}
+
+  tinyglobby@0.2.9:
+    resolution: {integrity: sha512-8or1+BGEdk1Zkkw2ii16qSS7uVrQJPre5A9o/XkWPATkk23FZh/15BKFxPnlTy6vkljZxLqYCzzBMj30ZrSvjw==}
+    engines: {node: '>=12.0.0'}
+
+  tinypool@1.0.1:
+    resolution: {integrity: sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==}
+    engines: {node: ^18.0.0 || >=20.0.0}
+
+  tinyrainbow@1.2.0:
+    resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==}
+    engines: {node: '>=14.0.0'}
+
+  tinyspy@3.0.2:
+    resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==}
+    engines: {node: '>=14.0.0'}
+
+  tmp@0.0.33:
+    resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
+    engines: {node: '>=0.6.0'}
+
+  tmp@0.2.1:
+    resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==}
+    engines: {node: '>=8.17.0'}
+
+  to-fast-properties@2.0.0:
+    resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
+    engines: {node: '>=4'}
+
+  to-regex-range@5.0.1:
+    resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+    engines: {node: '>=8.0'}
+
+  totalist@3.0.1:
+    resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
+    engines: {node: '>=6'}
+
+  tr46@0.0.3:
+    resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+  tr46@1.0.1:
+    resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==}
+
+  tree-sitter-haskell@0.21.0:
+    resolution: {integrity: sha512-b2RLegPHuYPh7nJ3YKWgkWnFYxmYlQDE8TDJuNH+iuNuBcCMYyaA9JlJlMHfCvf7DmJNPtqqbO9Kh9NXEmbatQ==}
+    peerDependencies:
+      tree-sitter: ^0.21.0
+      tree_sitter: '*'
+    peerDependenciesMeta:
+      tree_sitter:
+        optional: true
+
+  tree-sitter@0.21.1:
+    resolution: {integrity: sha512-7dxoA6kYvtgWw80265MyqJlkRl4yawIjO7S5MigytjELkX43fV2WsAXzsNfO7sBpPPCF5Gp0+XzHk0DwLCq3xQ==}
+
+  treeverse@3.0.0:
+    resolution: {integrity: sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==}
+    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+  trim-lines@3.0.1:
+    resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
+
+  trim-newlines@3.0.1:
+    resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==}
+    engines: {node: '>=8'}
+
+  trough@2.2.0:
+    resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==}
+
+  ts-interface-checker@0.1.13:
+    resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
+
+  tsconfck@3.1.4:
+    resolution: {integrity: sha512-kdqWFGVJqe+KGYvlSO9NIaWn9jT1Ny4oKVzAJsKii5eoE9snzTJzL4+MMVOMn+fikWGFmKEylcXL710V/kIPJQ==}
+    engines: {node: ^18 || >=20}
+    hasBin: true
+    peerDependencies:
+      typescript: ^5.0.0
+    peerDependenciesMeta:
+      typescript:
+        optional: true
+
+  tsconfig-paths@3.15.0:
+    resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+
+  tsconfig-paths@4.2.0:
+    resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==}
+    engines: {node: '>=6'}
+
+  tslib@1.14.1:
+    resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
+
+  tslib@2.8.0:
+    resolution: {integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==}
+
+  tsutils@3.21.0:
+    resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
+    engines: {node: '>= 6'}
+    peerDependencies:
+      typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
+
+  tuf-js@2.2.1:
+    resolution: {integrity: sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==}
+    engines: {node: ^16.14.0 || >=18.0.0}
+
+  tunnel-agent@0.6.0:
+    resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
+
+  type-check@0.4.0:
+    resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
+    engines: {node: '>= 0.8.0'}
+
+  type-fest@0.16.0:
+    resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==}
+    engines: {node: '>=10'}
+
+  type-fest@0.18.1:
+    resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==}
+    engines: {node: '>=10'}
+
+  type-fest@0.20.2:
+    resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
+    engines: {node: '>=10'}
+
+  type-fest@0.21.3:
+    resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
+    engines: {node: '>=10'}
+
+  type-fest@0.4.1:
+    resolution: {integrity: sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==}
+    engines: {node: '>=6'}
+
+  type-fest@0.6.0:
+    resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==}
+    engines: {node: '>=8'}
+
+  type-fest@0.8.1:
+    resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==}
+    engines: {node: '>=8'}
+
+  type-fest@4.26.1:
+    resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==}
+    engines: {node: '>=16'}
+
+  typed-array-buffer@1.0.0:
+    resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==}
+    engines: {node: '>= 0.4'}
+
+  typed-array-buffer@1.0.2:
+    resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==}
+    engines: {node: '>= 0.4'}
+
+  typed-array-byte-length@1.0.0:
+    resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==}
+    engines: {node: '>= 0.4'}
+
+  typed-array-byte-length@1.0.1:
+    resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==}
+    engines: {node: '>= 0.4'}
+
+  typed-array-byte-offset@1.0.0:
+    resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==}
+    engines: {node: '>= 0.4'}
+
+  typed-array-byte-offset@1.0.2:
+    resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==}
+    engines: {node: '>= 0.4'}
+
+  typed-array-length@1.0.4:
+    resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==}
+
+  typed-array-length@1.0.6:
+    resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==}
+    engines: {node: '>= 0.4'}
+
+  typedarray@0.0.6:
+    resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
+
+  typescript@5.3.3:
+    resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==}
+    engines: {node: '>=14.17'}
+    hasBin: true
+
+  typescript@5.6.3:
+    resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==}
+    engines: {node: '>=14.17'}
+    hasBin: true
+
+  typical@2.6.1:
+    resolution: {integrity: sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg==}
+
+  typical@4.0.0:
+    resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==}
+    engines: {node: '>=8'}
+
+  typical@7.2.0:
+    resolution: {integrity: sha512-W1+HdVRUl8fS3MZ9ogD51GOb46xMmhAZzR0WPw5jcgIZQJVvkddYzAl4YTU6g5w33Y1iRQLdIi2/1jhi2RNL0g==}
+    engines: {node: '>=12.17'}
+
+  uc.micro@2.1.0:
+    resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==}
+
+  uglify-js@3.19.3:
+    resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==}
+    engines: {node: '>=0.8.0'}
+    hasBin: true
+
+  ultrahtml@1.5.3:
+    resolution: {integrity: sha512-GykOvZwgDWZlTQMtp5jrD4BVL+gNn2NVlVafjcFUJ7taY20tqYdwdoWBFy6GBJsNTZe1GkGPkSl5knQAjtgceg==}
+
+  unbox-primitive@1.0.2:
+    resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
+
+  underscore@1.13.6:
+    resolution: {integrity: sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==}
+
+  undici-types@6.19.8:
+    resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
+
+  unherit@3.0.1:
+    resolution: {integrity: sha512-akOOQ/Yln8a2sgcLj4U0Jmx0R5jpIg2IUyRrWOzmEbjBtGzBdHtSeFKgoEcoH4KYIG/Pb8GQ/BwtYm0GCq1Sqg==}
+
+  unicode-canonical-property-names-ecmascript@2.0.1:
+    resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==}
+    engines: {node: '>=4'}
+
+  unicode-match-property-ecmascript@2.0.0:
+    resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==}
+    engines: {node: '>=4'}
+
+  unicode-match-property-value-ecmascript@2.2.0:
+    resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==}
+    engines: {node: '>=4'}
+
+  unicode-property-aliases-ecmascript@2.1.0:
+    resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==}
+    engines: {node: '>=4'}
+
+  unified@10.1.2:
+    resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==}
+
+  unified@11.0.4:
+    resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==}
+
+  unified@11.0.5:
+    resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==}
+
+  unique-filename@3.0.0:
+    resolution: {integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==}
+    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+  unique-slug@4.0.0:
+    resolution: {integrity: sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==}
+    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+  unique-string@2.0.0:
+    resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==}
+    engines: {node: '>=8'}
+
+  unist-util-find-after@5.0.0:
+    resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==}
+
+  unist-util-is@3.0.0:
+    resolution: {integrity: sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==}
+
+  unist-util-is@5.2.1:
+    resolution: {integrity: sha512-u9njyyfEh43npf1M+yGKDGVPbY/JWEemg5nH05ncKPfi+kBbKBJoTdsogMu33uhytuLlv9y0O7GH7fEdwLdLQw==}
+
+  unist-util-is@6.0.0:
+    resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==}
+
+  unist-util-modify-children@3.1.1:
+    resolution: {integrity: sha512-yXi4Lm+TG5VG+qvokP6tpnk+r1EPwyYL04JWDxLvgvPV40jANh7nm3udk65OOWquvbMDe+PL9+LmkxDpTv/7BA==}
+
+  unist-util-modify-children@4.0.0:
+    resolution: {integrity: sha512-+tdN5fGNddvsQdIzUF3Xx82CU9sMM+fA0dLgR9vOmT0oPT2jH+P1nd5lSqfCfXAw+93NhcXNY2qqvTUtE4cQkw==}
+
+  unist-util-position-from-estree@2.0.0:
+    resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==}
+
+  unist-util-position@5.0.0:
+    resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
+
+  unist-util-remove-position@5.0.0:
+    resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==}
+
+  unist-util-stringify-position@3.0.3:
+    resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==}
+
+  unist-util-stringify-position@4.0.0:
+    resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
+
+  unist-util-visit-children@2.0.2:
+    resolution: {integrity: sha512-+LWpMFqyUwLGpsQxpumsQ9o9DG2VGLFrpz+rpVXYIEdPy57GSy5HioC0g3bg/8WP9oCLlapQtklOzQ8uLS496Q==}
+
+  unist-util-visit-children@3.0.0:
+    resolution: {integrity: sha512-RgmdTfSBOg04sdPcpTSD1jzoNBjt9a80/ZCzp5cI9n1qPzLZWF9YdvWGN2zmTumP1HWhXKdUWexjy/Wy/lJ7tA==}
+
+  unist-util-visit-parents@2.1.2:
+    resolution: {integrity: sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==}
+
+  unist-util-visit-parents@5.1.3:
+    resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==}
+
+  unist-util-visit-parents@6.0.1:
+    resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==}
+
+  unist-util-visit@1.4.1:
+    resolution: {integrity: sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==}
+
+  unist-util-visit@4.1.2:
+    resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==}
+
+  unist-util-visit@5.0.0:
+    resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
+
+  universal-user-agent@6.0.0:
+    resolution: {integrity: sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==}
+
+  universalify@2.0.0:
+    resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==}
+    engines: {node: '>= 10.0.0'}
+
+  universalify@2.0.1:
+    resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
+    engines: {node: '>= 10.0.0'}
+
+  unmute-ios-audio@3.3.0:
+    resolution: {integrity: sha512-MmoCOrsS2gn3wLT2tT+hF56Q4V4kksIKn2LHrwAtX6umzQwQHDWSh1slMzH+0WuxTZ62s3w8/wsfIII1FQ7ACg==}
+
+  upath@1.2.0:
+    resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==}
+    engines: {node: '>=4'}
+
+  upath@2.0.1:
+    resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==}
+    engines: {node: '>=4'}
+
+  update-browserslist-db@1.1.1:
+    resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==}
+    hasBin: true
+    peerDependencies:
+      browserslist: '>= 4.21.0'
+
+  uri-js@4.4.1:
+    resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+
+  util-deprecate@1.0.2:
+    resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+
+  uuid@10.0.0:
+    resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==}
+    hasBin: true
+
+  validate-npm-package-license@3.0.4:
+    resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
+
+  validate-npm-package-name@5.0.1:
+    resolution: {integrity: sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==}
+    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+  vfile-location@5.0.2:
+    resolution: {integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==}
+
+  vfile-message@3.1.4:
+    resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==}
+
+  vfile-message@4.0.2:
+    resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==}
+
+  vfile@5.3.7:
+    resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==}
+
+  vfile@6.0.3:
+    resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==}
+
+  vinyl-sourcemaps-apply@0.2.1:
+    resolution: {integrity: sha512-+oDh3KYZBoZC8hfocrbrxbLUeaYtQK7J5WU5Br9VqWqmCll3tFJqKp97GC9GmMsVIL0qnx2DgEDVxdo5EZ5sSw==}
+
+  vinyl@2.2.1:
+    resolution: {integrity: sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==}
+    engines: {node: '>= 0.10'}
+
+  vite-node@2.1.3:
+    resolution: {integrity: sha512-I1JadzO+xYX887S39Do+paRePCKoiDrWRRjp9kkG5he0t7RXNvPAJPCQSJqbGN4uCrFFeS3Kj3sLqY8NMYBEdA==}
+    engines: {node: ^18.0.0 || >=20.0.0}
+    hasBin: true
+
+  vite-plugin-pwa@0.17.5:
+    resolution: {integrity: sha512-UxRNPiJBzh4tqU/vc8G2TxmrUTzT6BqvSzhszLk62uKsf+npXdvLxGDz9C675f4BJi6MbD2tPnJhi5txlMzxbQ==}
+    engines: {node: '>=16.0.0'}
+    peerDependencies:
+      vite: ^3.1.0 || ^4.0.0 || ^5.0.0
+      workbox-build: ^7.0.0
+      workbox-window: ^7.0.0
+
+  vite@5.4.9:
+    resolution: {integrity: sha512-20OVpJHh0PAM0oSOELa5GaZNWeDjcAvQjGXy2Uyr+Tp+/D2/Hdz6NLgpJLsarPTA2QJ6v8mX2P1ZfbsSKvdMkg==}
+    engines: {node: ^18.0.0 || >=20.0.0}
+    hasBin: true
+    peerDependencies:
+      '@types/node': ^18.0.0 || >=20.0.0
+      less: '*'
+      lightningcss: ^1.21.0
+      sass: '*'
+      sass-embedded: '*'
+      stylus: '*'
+      sugarss: '*'
+      terser: ^5.4.0
+    peerDependenciesMeta:
+      '@types/node':
+        optional: true
+      less:
+        optional: true
+      lightningcss:
+        optional: true
+      sass:
+        optional: true
+      sass-embedded:
+        optional: true
+      stylus:
+        optional: true
+      sugarss:
+        optional: true
+      terser:
+        optional: true
+
+  vitefu@1.0.3:
+    resolution: {integrity: sha512-iKKfOMBHob2WxEJbqbJjHAkmYgvFDPhuqrO82om83S8RLk+17FtyMBfcyeH8GqD0ihShtkMW/zzJgiA51hCNCQ==}
+    peerDependencies:
+      vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0-beta.0
+    peerDependenciesMeta:
+      vite:
+        optional: true
+
+  vitest@2.1.3:
+    resolution: {integrity: sha512-Zrxbg/WiIvUP2uEzelDNTXmEMJXuzJ1kCpbDvaKByFA9MNeO95V+7r/3ti0qzJzrxdyuUw5VduN7k+D3VmVOSA==}
+    engines: {node: ^18.0.0 || >=20.0.0}
+    hasBin: true
+    peerDependencies:
+      '@edge-runtime/vm': '*'
+      '@types/node': ^18.0.0 || >=20.0.0
+      '@vitest/browser': 2.1.3
+      '@vitest/ui': 2.1.3
+      happy-dom: '*'
+      jsdom: '*'
+    peerDependenciesMeta:
+      '@edge-runtime/vm':
+        optional: true
+      '@types/node':
+        optional: true
+      '@vitest/browser':
+        optional: true
+      '@vitest/ui':
+        optional: true
+      happy-dom:
+        optional: true
+      jsdom:
+        optional: true
+
+  w3c-keyname@2.2.6:
+    resolution: {integrity: sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg==}
+
+  walk-back@2.0.1:
+    resolution: {integrity: sha512-Nb6GvBR8UWX1D+Le+xUq0+Q1kFmRBIWVrfLnQAOmcpEzA9oAxwJ9gIr36t9TWYfzvWRvuMtjHiVsJYEkXWaTAQ==}
+    engines: {node: '>=0.10.0'}
+
+  walk-back@5.1.1:
+    resolution: {integrity: sha512-e/FRLDVdZQWFrAzU6Hdvpm7D7m2ina833gIKLptQykRK49mmCYHLHq7UqjPDbxbKLZkTkW1rFqbengdE3sLfdw==}
+    engines: {node: '>=12.17'}
+
+  walk-up-path@3.0.1:
+    resolution: {integrity: sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==}
+
+  wav@1.0.2:
+    resolution: {integrity: sha512-viHtz3cDd/Tcr/HbNqzQCofKdF6kWUymH9LGDdskfWFoIy/HJ+RTihgjEcHfnsy1PO4e9B+y4HwgTwMrByquhg==}
+
+  wcwidth@1.0.1:
+    resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
+
+  web-midi-api@2.2.2:
+    resolution: {integrity: sha512-lQFqcdmzoxLx1833DOC4bavfk9Cp5bjkC5SlZAceqsuUoc2j+fYSbqv45XwJqeECkCUXzB9UQ8wyWr40ppINhw==}
+
+  web-namespaces@2.0.1:
+    resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==}
+
+  web-streams-polyfill@3.2.1:
+    resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==}
+    engines: {node: '>= 8'}
+
+  web-tree-sitter@0.20.8:
+    resolution: {integrity: sha512-weOVgZ3aAARgdnb220GqYuh7+rZU0Ka9k9yfKtGAzEYMa6GgiCzW9JjQRJyCJakvibQW+dfjJdihjInKuuCAUQ==}
+
+  webidl-conversions@3.0.1:
+    resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+  webidl-conversions@4.0.2:
+    resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
+
+  webmidi@3.1.11:
+    resolution: {integrity: sha512-qtXy0cJ7FbE2SBRyN/vcDFSJvCdcKiWreAdxCAtJSu1btWyzOwDfJyFuheylrwn5Uj4nIINVKCJOeqYSeG75Tg==}
+    engines: {node: '>=8.5'}
+
+  whatwg-url@5.0.0:
+    resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+  whatwg-url@7.1.0:
+    resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==}
+
+  which-boxed-primitive@1.0.2:
+    resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
+
+  which-module@2.0.1:
+    resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==}
+
+  which-pm-runs@1.1.0:
+    resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==}
+    engines: {node: '>=4'}
+
+  which-pm@3.0.0:
+    resolution: {integrity: sha512-ysVYmw6+ZBhx3+ZkcPwRuJi38ZOTLJJ33PSHaitLxSKUMsh0LkKd0nC69zZCwt5D+AYUcMK2hhw4yWny20vSGg==}
+    engines: {node: '>=18.12'}
+
+  which-typed-array@1.1.13:
+    resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==}
+    engines: {node: '>= 0.4'}
+
+  which-typed-array@1.1.15:
+    resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==}
+    engines: {node: '>= 0.4'}
+
+  which@2.0.2:
+    resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+    engines: {node: '>= 8'}
+    hasBin: true
+
+  which@4.0.0:
+    resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==}
+    engines: {node: ^16.13.0 || >=18.0.0}
+    hasBin: true
+
+  why-is-node-running@2.3.0:
+    resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
+    engines: {node: '>=8'}
+    hasBin: true
+
+  wide-align@1.1.5:
+    resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==}
+
+  widest-line@5.0.0:
+    resolution: {integrity: sha512-c9bZp7b5YtRj2wOe6dlj32MK+Bx/M/d+9VB2SHM1OtsUHR0aV0tdP6DWh/iMt0kWi1t5g1Iudu6hQRNd1A4PVA==}
+    engines: {node: '>=18'}
+
+  wordwrap@1.0.0:
+    resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
+
+  wordwrapjs@3.0.0:
+    resolution: {integrity: sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==}
+    engines: {node: '>=4.0.0'}
+
+  workbox-background-sync@7.0.0:
+    resolution: {integrity: sha512-S+m1+84gjdueM+jIKZ+I0Lx0BDHkk5Nu6a3kTVxP4fdj3gKouRNmhO8H290ybnJTOPfBDtTMXSQA/QLTvr7PeA==}
+
+  workbox-broadcast-update@7.0.0:
+    resolution: {integrity: sha512-oUuh4jzZrLySOo0tC0WoKiSg90bVAcnE98uW7F8GFiSOXnhogfNDGZelPJa+6KpGBO5+Qelv04Hqx2UD+BJqNQ==}
+
+  workbox-build@7.0.0:
+    resolution: {integrity: sha512-CttE7WCYW9sZC+nUYhQg3WzzGPr4IHmrPnjKiu3AMXsiNQKx+l4hHl63WTrnicLmKEKHScWDH8xsGBdrYgtBzg==}
+    engines: {node: '>=16.0.0'}
+
+  workbox-cacheable-response@7.0.0:
+    resolution: {integrity: sha512-0lrtyGHn/LH8kKAJVOQfSu3/80WDc9Ma8ng0p2i/5HuUndGttH+mGMSvOskjOdFImLs2XZIimErp7tSOPmu/6g==}
+
+  workbox-core@7.0.0:
+    resolution: {integrity: sha512-81JkAAZtfVP8darBpfRTovHg8DGAVrKFgHpOArZbdFd78VqHr5Iw65f2guwjE2NlCFbPFDoez3D3/6ZvhI/rwQ==}
+
+  workbox-core@7.1.0:
+    resolution: {integrity: sha512-5KB4KOY8rtL31nEF7BfvU7FMzKT4B5TkbYa2tzkS+Peqj0gayMT9SytSFtNzlrvMaWgv6y/yvP9C0IbpFjV30Q==}
+
+  workbox-expiration@7.0.0:
+    resolution: {integrity: sha512-MLK+fogW+pC3IWU9SFE+FRStvDVutwJMR5if1g7oBJx3qwmO69BNoJQVaMXq41R0gg3MzxVfwOGKx3i9P6sOLQ==}
+
+  workbox-google-analytics@7.0.0:
+    resolution: {integrity: sha512-MEYM1JTn/qiC3DbpvP2BVhyIH+dV/5BjHk756u9VbwuAhu0QHyKscTnisQuz21lfRpOwiS9z4XdqeVAKol0bzg==}
+
+  workbox-navigation-preload@7.0.0:
+    resolution: {integrity: sha512-juWCSrxo/fiMz3RsvDspeSLGmbgC0U9tKqcUPZBCf35s64wlaLXyn2KdHHXVQrb2cqF7I0Hc9siQalainmnXJA==}
+
+  workbox-precaching@7.0.0:
+    resolution: {integrity: sha512-EC0vol623LJqTJo1mkhD9DZmMP604vHqni3EohhQVwhJlTgyKyOkMrZNy5/QHfOby+39xqC01gv4LjOm4HSfnA==}
+
+  workbox-range-requests@7.0.0:
+    resolution: {integrity: sha512-SxAzoVl9j/zRU9OT5+IQs7pbJBOUOlriB8Gn9YMvi38BNZRbM+RvkujHMo8FOe9IWrqqwYgDFBfv6sk76I1yaQ==}
+
+  workbox-recipes@7.0.0:
+    resolution: {integrity: sha512-DntcK9wuG3rYQOONWC0PejxYYIDHyWWZB/ueTbOUDQgefaeIj1kJ7pdP3LZV2lfrj8XXXBWt+JDRSw1lLLOnww==}
+
+  workbox-routing@7.0.0:
+    resolution: {integrity: sha512-8YxLr3xvqidnbVeGyRGkaV4YdlKkn5qZ1LfEePW3dq+ydE73hUUJJuLmGEykW3fMX8x8mNdL0XrWgotcuZjIvA==}
+
+  workbox-strategies@7.0.0:
+    resolution: {integrity: sha512-dg3qJU7tR/Gcd/XXOOo7x9QoCI9nk74JopaJaYAQ+ugLi57gPsXycVdBnYbayVj34m6Y8ppPwIuecrzkpBVwbA==}
+
+  workbox-streams@7.0.0:
+    resolution: {integrity: sha512-moVsh+5to//l6IERWceYKGiftc+prNnqOp2sgALJJFbnNVpTXzKISlTIsrWY+ogMqt+x1oMazIdHj25kBSq/HQ==}
+
+  workbox-sw@7.0.0:
+    resolution: {integrity: sha512-SWfEouQfjRiZ7GNABzHUKUyj8pCoe+RwjfOIajcx6J5mtgKkN+t8UToHnpaJL5UVVOf5YhJh+OHhbVNIHe+LVA==}
+
+  workbox-window@7.0.0:
+    resolution: {integrity: sha512-j7P/bsAWE/a7sxqTzXo3P2ALb1reTfZdvVp6OJ/uLr/C2kZAMvjeWGm8V4htQhor7DOvYg0sSbFN2+flT5U0qA==}
+
+  workbox-window@7.1.0:
+    resolution: {integrity: sha512-ZHeROyqR+AS5UPzholQRDttLFqGMwP0Np8MKWAdyxsDETxq3qOAyXvqessc3GniohG6e0mAqSQyKOHmT8zPF7g==}
+
+  worker-timers-broker@6.1.8:
+    resolution: {integrity: sha512-FUCJu9jlK3A8WqLTKXM9E6kAmI/dR1vAJ8dHYLMisLNB/n3GuaFIjJ7pn16ZcD1zCOf7P6H62lWIEBi+yz/zQQ==}
+
+  worker-timers-worker@7.0.71:
+    resolution: {integrity: sha512-ks/5YKwZsto1c2vmljroppOKCivB/ma97g9y77MAAz2TBBjPPgpoOiS1qYQKIgvGTr2QYPT3XhJWIB6Rj2MVPQ==}
+
+  worker-timers@7.1.8:
+    resolution: {integrity: sha512-R54psRKYVLuzff7c1OTFcq/4Hue5Vlz4bFtNEIarpSiCYhpifHU3aIQI29S84o1j87ePCYqbmEJPqwBTf+3sfw==}
+
+  wrap-ansi@6.2.0:
+    resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
+    engines: {node: '>=8'}
+
+  wrap-ansi@7.0.0:
+    resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+    engines: {node: '>=10'}
+
+  wrap-ansi@8.1.0:
+    resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+    engines: {node: '>=12'}
+
+  wrap-ansi@9.0.0:
+    resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==}
+    engines: {node: '>=18'}
+
+  wrappy@1.0.2:
+    resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+  write-file-atomic@2.4.3:
+    resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==}
+
+  write-file-atomic@5.0.1:
+    resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==}
+    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+  write-json-file@3.2.0:
+    resolution: {integrity: sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==}
+    engines: {node: '>=6'}
+
+  write-pkg@4.0.0:
+    resolution: {integrity: sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==}
+    engines: {node: '>=8'}
+
+  ws@8.18.0:
+    resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
+    engines: {node: '>=10.0.0'}
+    peerDependencies:
+      bufferutil: ^4.0.1
+      utf-8-validate: '>=5.0.2'
+    peerDependenciesMeta:
+      bufferutil:
+        optional: true
+      utf-8-validate:
+        optional: true
+
+  xmlcreate@2.0.4:
+    resolution: {integrity: sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==}
+
+  xtend@4.0.2:
+    resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
+    engines: {node: '>=0.4'}
+
+  xxhash-wasm@1.0.2:
+    resolution: {integrity: sha512-ibF0Or+FivM9lNrg+HGJfVX8WJqgo+kCLDc4vx6xMeTce7Aj+DLttKbxxRR/gNLSAelRc1omAPlJ77N/Jem07A==}
+
+  y18n@4.0.3:
+    resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}
+
+  y18n@5.0.8:
+    resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+    engines: {node: '>=10'}
+
+  yallist@3.1.1:
+    resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+
+  yallist@4.0.0:
+    resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+
+  yaml@2.3.4:
+    resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==}
+    engines: {node: '>= 14'}
+
+  yargs-parser@18.1.3:
+    resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==}
+    engines: {node: '>=6'}
+
+  yargs-parser@20.2.9:
+    resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
+    engines: {node: '>=10'}
+
+  yargs-parser@21.1.1:
+    resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
+    engines: {node: '>=12'}
+
+  yargs@15.4.1:
+    resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==}
+    engines: {node: '>=8'}
+
+  yargs@16.2.0:
+    resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
+    engines: {node: '>=10'}
+
+  yargs@17.7.2:
+    resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
+    engines: {node: '>=12'}
+
+  yocto-queue@0.1.0:
+    resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+    engines: {node: '>=10'}
+
+  yocto-queue@1.1.1:
+    resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==}
+    engines: {node: '>=12.20'}
+
+  zod-to-json-schema@3.23.3:
+    resolution: {integrity: sha512-TYWChTxKQbRJp5ST22o/Irt9KC5nj7CdBKYB/AosCRdj/wxEMvv4NNaj9XVUHDOIp53ZxArGhnw5HMZziPFjog==}
+    peerDependencies:
+      zod: ^3.23.3
+
+  zod-to-ts@1.2.0:
+    resolution: {integrity: sha512-x30XE43V+InwGpvTySRNz9kB7qFU8DlyEy7BsSTCHPH1R0QasMmHWZDCzYm6bVXtj/9NNJAZF3jW8rzFvH5OFA==}
+    peerDependencies:
+      typescript: ^4.9.4 || ^5.0.2
+      zod: ^3
+
+  zod@3.23.8:
+    resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==}
+
+  zwitch@2.0.4:
+    resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
+
+snapshots:
+
+  '@aashutoshrathi/word-wrap@1.2.6': {}
+
+  '@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.22.0)(search-insights@2.13.0)':
     dependencies:
-      '@rollup/pluginutils': 3.1.0(rollup@2.79.1)
+      '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.22.0)(search-insights@2.13.0)
+      '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.22.0)
+    transitivePeerDependencies:
+      - '@algolia/client-search'
+      - algoliasearch
+      - search-insights
+
+  '@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.22.0)(search-insights@2.13.0)':
+    dependencies:
+      '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.22.0)
+      search-insights: 2.13.0
+    transitivePeerDependencies:
+      - '@algolia/client-search'
+      - algoliasearch
+
+  '@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.22.0)':
+    dependencies:
+      '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.22.0)
+      '@algolia/client-search': 4.22.0
+      algoliasearch: 4.22.0
+
+  '@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.22.0)':
+    dependencies:
+      '@algolia/client-search': 4.22.0
+      algoliasearch: 4.22.0
+
+  '@algolia/cache-browser-local-storage@4.22.0':
+    dependencies:
+      '@algolia/cache-common': 4.22.0
+
+  '@algolia/cache-common@4.22.0': {}
+
+  '@algolia/cache-in-memory@4.22.0':
+    dependencies:
+      '@algolia/cache-common': 4.22.0
+
+  '@algolia/client-account@4.22.0':
+    dependencies:
+      '@algolia/client-common': 4.22.0
+      '@algolia/client-search': 4.22.0
+      '@algolia/transporter': 4.22.0
+
+  '@algolia/client-analytics@4.22.0':
+    dependencies:
+      '@algolia/client-common': 4.22.0
+      '@algolia/client-search': 4.22.0
+      '@algolia/requester-common': 4.22.0
+      '@algolia/transporter': 4.22.0
+
+  '@algolia/client-common@4.22.0':
+    dependencies:
+      '@algolia/requester-common': 4.22.0
+      '@algolia/transporter': 4.22.0
+
+  '@algolia/client-personalization@4.22.0':
+    dependencies:
+      '@algolia/client-common': 4.22.0
+      '@algolia/requester-common': 4.22.0
+      '@algolia/transporter': 4.22.0
+
+  '@algolia/client-search@4.22.0':
+    dependencies:
+      '@algolia/client-common': 4.22.0
+      '@algolia/requester-common': 4.22.0
+      '@algolia/transporter': 4.22.0
+
+  '@algolia/logger-common@4.22.0': {}
+
+  '@algolia/logger-console@4.22.0':
+    dependencies:
+      '@algolia/logger-common': 4.22.0
+
+  '@algolia/requester-browser-xhr@4.22.0':
+    dependencies:
+      '@algolia/requester-common': 4.22.0
+
+  '@algolia/requester-common@4.22.0': {}
+
+  '@algolia/requester-node-http@4.22.0':
+    dependencies:
+      '@algolia/requester-common': 4.22.0
+
+  '@algolia/transporter@4.22.0':
+    dependencies:
+      '@algolia/cache-common': 4.22.0
+      '@algolia/logger-common': 4.22.0
+      '@algolia/requester-common': 4.22.0
+
+  '@alloc/quick-lru@5.2.0': {}
+
+  '@ampproject/remapping@2.3.0':
+    dependencies:
+      '@jridgewell/gen-mapping': 0.3.5
+      '@jridgewell/trace-mapping': 0.3.25
+
+  '@apideck/better-ajv-errors@0.3.6(ajv@8.17.1)':
+    dependencies:
+      ajv: 8.17.1
+      json-schema: 0.4.0
+      jsonpointer: 5.0.1
+      leven: 3.1.0
+
+  '@astro-community/astro-embed-youtube@0.4.5(astro@4.16.6(@types/node@20.16.12)(rollup@2.79.2)(terser@5.36.0)(typescript@5.6.3))':
+    dependencies:
+      astro: 4.16.6(@types/node@20.16.12)(rollup@2.79.2)(terser@5.36.0)(typescript@5.6.3)
+      lite-youtube-embed: 0.3.3
+
+  '@astrojs/compiler@2.10.3': {}
+
+  '@astrojs/internal-helpers@0.4.1': {}
+
+  '@astrojs/markdown-remark@5.1.0':
+    dependencies:
+      '@astrojs/prism': 3.1.0
+      github-slugger: 2.0.0
+      hast-util-from-html: 2.0.3
+      hast-util-to-text: 4.0.2
+      import-meta-resolve: 4.1.0
+      mdast-util-definitions: 6.0.0
+      rehype-raw: 7.0.0
+      rehype-stringify: 10.0.1
+      remark-gfm: 4.0.0
+      remark-parse: 11.0.0
+      remark-rehype: 11.1.1
+      remark-smartypants: 2.1.0
+      shiki: 1.22.0
+      unified: 11.0.5
+      unist-util-remove-position: 5.0.0
+      unist-util-visit: 5.0.0
+      unist-util-visit-parents: 6.0.1
+      vfile: 6.0.3
+    transitivePeerDependencies:
+      - supports-color
+
+  '@astrojs/markdown-remark@5.3.0':
+    dependencies:
+      '@astrojs/prism': 3.1.0
+      github-slugger: 2.0.0
+      hast-util-from-html: 2.0.3
+      hast-util-to-text: 4.0.2
+      import-meta-resolve: 4.1.0
+      mdast-util-definitions: 6.0.0
+      rehype-raw: 7.0.0
+      rehype-stringify: 10.0.1
+      remark-gfm: 4.0.0
+      remark-parse: 11.0.0
+      remark-rehype: 11.1.1
+      remark-smartypants: 3.0.2
+      shiki: 1.22.0
+      unified: 11.0.5
+      unist-util-remove-position: 5.0.0
+      unist-util-visit: 5.0.0
+      unist-util-visit-parents: 6.0.1
+      vfile: 6.0.3
+    transitivePeerDependencies:
+      - supports-color
+
+  '@astrojs/mdx@2.3.1(astro@4.16.6(@types/node@20.16.12)(rollup@2.79.2)(terser@5.36.0)(typescript@5.6.3))':
+    dependencies:
+      '@astrojs/markdown-remark': 5.1.0
+      '@mdx-js/mdx': 3.1.0(acorn@8.13.0)
+      acorn: 8.13.0
+      astro: 4.16.6(@types/node@20.16.12)(rollup@2.79.2)(terser@5.36.0)(typescript@5.6.3)
+      es-module-lexer: 1.5.4
+      estree-util-visit: 2.0.0
+      github-slugger: 2.0.0
+      gray-matter: 4.0.3
+      hast-util-to-html: 9.0.3
+      kleur: 4.1.5
+      rehype-raw: 7.0.0
+      remark-gfm: 4.0.0
+      remark-smartypants: 2.1.0
+      source-map: 0.7.4
+      unist-util-visit: 5.0.0
+      vfile: 6.0.3
+    transitivePeerDependencies:
+      - supports-color
+
+  '@astrojs/prism@3.1.0':
+    dependencies:
+      prismjs: 1.29.0
+
+  '@astrojs/react@3.6.2(@types/react-dom@18.3.1)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vite@5.4.9(@types/node@20.16.12)(terser@5.36.0))':
+    dependencies:
+      '@types/react': 18.3.11
+      '@types/react-dom': 18.3.1
+      '@vitejs/plugin-react': 4.3.2(vite@5.4.9(@types/node@20.16.12)(terser@5.36.0))
+      react: 18.3.1
+      react-dom: 18.3.1(react@18.3.1)
+      ultrahtml: 1.5.3
+    transitivePeerDependencies:
+      - supports-color
+      - vite
+
+  '@astrojs/rss@4.0.9':
+    dependencies:
+      fast-xml-parser: 4.5.0
+      kleur: 4.1.5
+
+  '@astrojs/tailwind@5.1.2(astro@4.16.6(@types/node@20.16.12)(rollup@2.79.2)(terser@5.36.0)(typescript@5.6.3))(tailwindcss@3.4.14)':
+    dependencies:
+      astro: 4.16.6(@types/node@20.16.12)(rollup@2.79.2)(terser@5.36.0)(typescript@5.6.3)
+      autoprefixer: 10.4.20(postcss@8.4.47)
+      postcss: 8.4.47
+      postcss-load-config: 4.0.2(postcss@8.4.47)
+      tailwindcss: 3.4.14
+    transitivePeerDependencies:
+      - ts-node
+
+  '@astrojs/telemetry@3.1.0':
+    dependencies:
+      ci-info: 4.0.0
+      debug: 4.3.7
+      dlv: 1.1.3
+      dset: 3.1.4
+      is-docker: 3.0.0
+      is-wsl: 3.1.0
+      which-pm-runs: 1.1.0
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/code-frame@7.23.5':
+    dependencies:
+      '@babel/highlight': 7.23.4
+      chalk: 2.4.2
+
+  '@babel/code-frame@7.25.7':
+    dependencies:
+      '@babel/highlight': 7.25.7
+      picocolors: 1.1.1
+
+  '@babel/compat-data@7.25.8': {}
+
+  '@babel/core@7.25.8':
+    dependencies:
+      '@ampproject/remapping': 2.3.0
+      '@babel/code-frame': 7.25.7
+      '@babel/generator': 7.25.7
+      '@babel/helper-compilation-targets': 7.25.7
+      '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.8)
+      '@babel/helpers': 7.25.7
+      '@babel/parser': 7.25.8
+      '@babel/template': 7.25.7
+      '@babel/traverse': 7.25.7
+      '@babel/types': 7.25.8
+      convert-source-map: 2.0.0
+      debug: 4.3.7
+      gensync: 1.0.0-beta.2
+      json5: 2.2.3
+      semver: 6.3.1
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/generator@7.18.2':
+    dependencies:
+      '@babel/types': 7.21.5
+      '@jridgewell/gen-mapping': 0.3.2
+      jsesc: 2.5.2
+
+  '@babel/generator@7.25.7':
+    dependencies:
+      '@babel/types': 7.25.8
+      '@jridgewell/gen-mapping': 0.3.5
+      '@jridgewell/trace-mapping': 0.3.25
+      jsesc: 3.0.2
+
+  '@babel/helper-annotate-as-pure@7.25.7':
+    dependencies:
+      '@babel/types': 7.25.8
+
+  '@babel/helper-builder-binary-assignment-operator-visitor@7.25.7':
+    dependencies:
+      '@babel/traverse': 7.25.7
+      '@babel/types': 7.25.8
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/helper-compilation-targets@7.25.7':
+    dependencies:
+      '@babel/compat-data': 7.25.8
+      '@babel/helper-validator-option': 7.25.7
+      browserslist: 4.24.0
+      lru-cache: 5.1.1
+      semver: 6.3.1
+
+  '@babel/helper-create-class-features-plugin@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-annotate-as-pure': 7.25.7
+      '@babel/helper-member-expression-to-functions': 7.25.7
+      '@babel/helper-optimise-call-expression': 7.25.7
+      '@babel/helper-replace-supers': 7.25.7(@babel/core@7.25.8)
+      '@babel/helper-skip-transparent-expression-wrappers': 7.25.7
+      '@babel/traverse': 7.25.7
+      semver: 6.3.1
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/helper-create-regexp-features-plugin@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-annotate-as-pure': 7.25.7
+      regexpu-core: 6.1.1
+      semver: 6.3.1
+
+  '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-compilation-targets': 7.25.7
+      '@babel/helper-plugin-utils': 7.25.7
+      debug: 4.3.7
+      lodash.debounce: 4.0.8
+      resolve: 1.22.8
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/helper-member-expression-to-functions@7.25.7':
+    dependencies:
+      '@babel/traverse': 7.25.7
+      '@babel/types': 7.25.8
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/helper-module-imports@7.25.7':
+    dependencies:
+      '@babel/traverse': 7.25.7
+      '@babel/types': 7.25.8
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/helper-module-transforms@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-module-imports': 7.25.7
+      '@babel/helper-simple-access': 7.25.7
+      '@babel/helper-validator-identifier': 7.25.7
+      '@babel/traverse': 7.25.7
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/helper-optimise-call-expression@7.25.7':
+    dependencies:
+      '@babel/types': 7.25.8
+
+  '@babel/helper-plugin-utils@7.25.7': {}
+
+  '@babel/helper-remap-async-to-generator@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-annotate-as-pure': 7.25.7
+      '@babel/helper-wrap-function': 7.25.7
+      '@babel/traverse': 7.25.7
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/helper-replace-supers@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-member-expression-to-functions': 7.25.7
+      '@babel/helper-optimise-call-expression': 7.25.7
+      '@babel/traverse': 7.25.7
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/helper-simple-access@7.25.7':
+    dependencies:
+      '@babel/traverse': 7.25.7
+      '@babel/types': 7.25.8
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/helper-skip-transparent-expression-wrappers@7.25.7':
+    dependencies:
+      '@babel/traverse': 7.25.7
+      '@babel/types': 7.25.8
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/helper-string-parser@7.19.4': {}
+
+  '@babel/helper-string-parser@7.21.5': {}
+
+  '@babel/helper-string-parser@7.25.7': {}
+
+  '@babel/helper-validator-identifier@7.19.1': {}
+
+  '@babel/helper-validator-identifier@7.25.7': {}
+
+  '@babel/helper-validator-option@7.25.7': {}
+
+  '@babel/helper-wrap-function@7.25.7':
+    dependencies:
+      '@babel/template': 7.25.7
+      '@babel/traverse': 7.25.7
+      '@babel/types': 7.25.8
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/helpers@7.25.7':
+    dependencies:
+      '@babel/template': 7.25.7
+      '@babel/types': 7.25.8
+
+  '@babel/highlight@7.23.4':
+    dependencies:
+      '@babel/helper-validator-identifier': 7.25.7
+      chalk: 2.4.2
+      js-tokens: 4.0.0
+
+  '@babel/highlight@7.25.7':
+    dependencies:
+      '@babel/helper-validator-identifier': 7.25.7
+      chalk: 2.4.2
+      js-tokens: 4.0.0
+      picocolors: 1.1.1
+
+  '@babel/parser@7.18.4':
+    dependencies:
+      '@babel/types': 7.21.5
+
+  '@babel/parser@7.21.4':
+    dependencies:
+      '@babel/types': 7.20.7
+
+  '@babel/parser@7.25.8':
+    dependencies:
+      '@babel/types': 7.25.8
+
+  '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+      '@babel/traverse': 7.25.7
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+      '@babel/helper-skip-transparent-expression-wrappers': 7.25.7
+      '@babel/plugin-transform-optional-chaining': 7.25.8(@babel/core@7.25.8)
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+      '@babel/traverse': 7.25.7
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+
+  '@babel/plugin-syntax-import-assertions@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-syntax-import-attributes@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-syntax-jsx@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.8)
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-transform-arrow-functions@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-transform-async-generator-functions@7.25.8(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+      '@babel/helper-remap-async-to-generator': 7.25.7(@babel/core@7.25.8)
+      '@babel/traverse': 7.25.7
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/plugin-transform-async-to-generator@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-module-imports': 7.25.7
+      '@babel/helper-plugin-utils': 7.25.7
+      '@babel/helper-remap-async-to-generator': 7.25.7(@babel/core@7.25.8)
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/plugin-transform-block-scoped-functions@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-transform-block-scoping@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-transform-class-properties@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.8)
+      '@babel/helper-plugin-utils': 7.25.7
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/plugin-transform-class-static-block@7.25.8(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.8)
+      '@babel/helper-plugin-utils': 7.25.7
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/plugin-transform-classes@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-annotate-as-pure': 7.25.7
+      '@babel/helper-compilation-targets': 7.25.7
+      '@babel/helper-plugin-utils': 7.25.7
+      '@babel/helper-replace-supers': 7.25.7(@babel/core@7.25.8)
+      '@babel/traverse': 7.25.7
+      globals: 11.12.0
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/plugin-transform-computed-properties@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+      '@babel/template': 7.25.7
+
+  '@babel/plugin-transform-destructuring@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-transform-dotall-regex@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.8)
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-transform-duplicate-keys@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.8)
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-transform-dynamic-import@7.25.8(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-transform-exponentiation-operator@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-builder-binary-assignment-operator-visitor': 7.25.7
+      '@babel/helper-plugin-utils': 7.25.7
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/plugin-transform-export-namespace-from@7.25.8(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-transform-for-of@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+      '@babel/helper-skip-transparent-expression-wrappers': 7.25.7
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/plugin-transform-function-name@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-compilation-targets': 7.25.7
+      '@babel/helper-plugin-utils': 7.25.7
+      '@babel/traverse': 7.25.7
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/plugin-transform-json-strings@7.25.8(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-transform-literals@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-transform-logical-assignment-operators@7.25.8(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-transform-member-expression-literals@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-transform-modules-amd@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.8)
+      '@babel/helper-plugin-utils': 7.25.7
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/plugin-transform-modules-commonjs@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.8)
+      '@babel/helper-plugin-utils': 7.25.7
+      '@babel/helper-simple-access': 7.25.7
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/plugin-transform-modules-systemjs@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.8)
+      '@babel/helper-plugin-utils': 7.25.7
+      '@babel/helper-validator-identifier': 7.25.7
+      '@babel/traverse': 7.25.7
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/plugin-transform-modules-umd@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.8)
+      '@babel/helper-plugin-utils': 7.25.7
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/plugin-transform-named-capturing-groups-regex@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.8)
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-transform-new-target@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-transform-nullish-coalescing-operator@7.25.8(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-transform-numeric-separator@7.25.8(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-transform-object-rest-spread@7.25.8(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-compilation-targets': 7.25.7
+      '@babel/helper-plugin-utils': 7.25.7
+      '@babel/plugin-transform-parameters': 7.25.7(@babel/core@7.25.8)
+
+  '@babel/plugin-transform-object-super@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+      '@babel/helper-replace-supers': 7.25.7(@babel/core@7.25.8)
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/plugin-transform-optional-catch-binding@7.25.8(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-transform-optional-chaining@7.25.8(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+      '@babel/helper-skip-transparent-expression-wrappers': 7.25.7
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/plugin-transform-parameters@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-transform-private-methods@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.8)
+      '@babel/helper-plugin-utils': 7.25.7
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/plugin-transform-private-property-in-object@7.25.8(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-annotate-as-pure': 7.25.7
+      '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.8)
+      '@babel/helper-plugin-utils': 7.25.7
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/plugin-transform-property-literals@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-transform-react-jsx-self@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-transform-react-jsx-source@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-transform-react-jsx@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-annotate-as-pure': 7.25.7
+      '@babel/helper-module-imports': 7.25.7
+      '@babel/helper-plugin-utils': 7.25.7
+      '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.8)
+      '@babel/types': 7.25.8
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/plugin-transform-regenerator@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+      regenerator-transform: 0.15.2
+
+  '@babel/plugin-transform-reserved-words@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-transform-shorthand-properties@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-transform-spread@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+      '@babel/helper-skip-transparent-expression-wrappers': 7.25.7
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/plugin-transform-sticky-regex@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-transform-template-literals@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-transform-typeof-symbol@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-transform-unicode-escapes@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-transform-unicode-property-regex@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.8)
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-transform-unicode-regex@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.8)
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/plugin-transform-unicode-sets-regex@7.25.7(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.8)
+      '@babel/helper-plugin-utils': 7.25.7
+
+  '@babel/preset-env@7.25.8(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/compat-data': 7.25.8
+      '@babel/core': 7.25.8
+      '@babel/helper-compilation-targets': 7.25.7
+      '@babel/helper-plugin-utils': 7.25.7
+      '@babel/helper-validator-option': 7.25.7
+      '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.8)
+      '@babel/plugin-syntax-import-assertions': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-syntax-import-attributes': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.25.8)
+      '@babel/plugin-transform-arrow-functions': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-async-generator-functions': 7.25.8(@babel/core@7.25.8)
+      '@babel/plugin-transform-async-to-generator': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-block-scoped-functions': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-block-scoping': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-class-properties': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-class-static-block': 7.25.8(@babel/core@7.25.8)
+      '@babel/plugin-transform-classes': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-computed-properties': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-destructuring': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-dotall-regex': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-duplicate-keys': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-dynamic-import': 7.25.8(@babel/core@7.25.8)
+      '@babel/plugin-transform-exponentiation-operator': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-export-namespace-from': 7.25.8(@babel/core@7.25.8)
+      '@babel/plugin-transform-for-of': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-function-name': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-json-strings': 7.25.8(@babel/core@7.25.8)
+      '@babel/plugin-transform-literals': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-logical-assignment-operators': 7.25.8(@babel/core@7.25.8)
+      '@babel/plugin-transform-member-expression-literals': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-modules-amd': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-modules-commonjs': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-modules-systemjs': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-modules-umd': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-named-capturing-groups-regex': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-new-target': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-nullish-coalescing-operator': 7.25.8(@babel/core@7.25.8)
+      '@babel/plugin-transform-numeric-separator': 7.25.8(@babel/core@7.25.8)
+      '@babel/plugin-transform-object-rest-spread': 7.25.8(@babel/core@7.25.8)
+      '@babel/plugin-transform-object-super': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-optional-catch-binding': 7.25.8(@babel/core@7.25.8)
+      '@babel/plugin-transform-optional-chaining': 7.25.8(@babel/core@7.25.8)
+      '@babel/plugin-transform-parameters': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-private-methods': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-private-property-in-object': 7.25.8(@babel/core@7.25.8)
+      '@babel/plugin-transform-property-literals': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-regenerator': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-reserved-words': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-shorthand-properties': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-spread': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-sticky-regex': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-template-literals': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-typeof-symbol': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-unicode-escapes': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-unicode-property-regex': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-unicode-regex': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-unicode-sets-regex': 7.25.7(@babel/core@7.25.8)
+      '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.25.8)
+      babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.25.8)
+      babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.8)
+      babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.25.8)
+      core-js-compat: 3.38.1
+      semver: 6.3.1
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.25.8)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-plugin-utils': 7.25.7
+      '@babel/types': 7.25.8
+      esutils: 2.0.3
+
+  '@babel/runtime@7.20.13':
+    dependencies:
+      regenerator-runtime: 0.13.11
+
+  '@babel/runtime@7.25.7':
+    dependencies:
+      regenerator-runtime: 0.14.1
+
+  '@babel/template@7.25.7':
+    dependencies:
+      '@babel/code-frame': 7.25.7
+      '@babel/parser': 7.25.8
+      '@babel/types': 7.25.8
+
+  '@babel/traverse@7.25.7':
+    dependencies:
+      '@babel/code-frame': 7.25.7
+      '@babel/generator': 7.25.7
+      '@babel/parser': 7.25.8
+      '@babel/template': 7.25.7
+      '@babel/types': 7.25.8
+      debug: 4.3.7
+      globals: 11.12.0
+    transitivePeerDependencies:
+      - supports-color
+
+  '@babel/types@7.19.0':
+    dependencies:
+      '@babel/helper-string-parser': 7.21.5
+      '@babel/helper-validator-identifier': 7.19.1
+      to-fast-properties: 2.0.0
+
+  '@babel/types@7.20.7':
+    dependencies:
+      '@babel/helper-string-parser': 7.19.4
+      '@babel/helper-validator-identifier': 7.19.1
+      to-fast-properties: 2.0.0
+
+  '@babel/types@7.21.5':
+    dependencies:
+      '@babel/helper-string-parser': 7.21.5
+      '@babel/helper-validator-identifier': 7.19.1
+      to-fast-properties: 2.0.0
+
+  '@babel/types@7.25.8':
+    dependencies:
+      '@babel/helper-string-parser': 7.25.7
+      '@babel/helper-validator-identifier': 7.25.7
+      to-fast-properties: 2.0.0
+
+  '@codemirror/autocomplete@6.18.1(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)(@lezer/common@1.0.2)':
+    dependencies:
+      '@codemirror/language': 6.10.3
+      '@codemirror/state': 6.4.1
+      '@codemirror/view': 6.34.1
+      '@lezer/common': 1.0.2
+
+  '@codemirror/commands@6.7.0':
+    dependencies:
+      '@codemirror/language': 6.10.3
+      '@codemirror/state': 6.4.1
+      '@codemirror/view': 6.34.1
+      '@lezer/common': 1.2.0
+
+  '@codemirror/lang-javascript@6.2.2':
+    dependencies:
+      '@codemirror/autocomplete': 6.18.1(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)(@lezer/common@1.0.2)
+      '@codemirror/language': 6.10.3
+      '@codemirror/lint': 6.1.0
+      '@codemirror/state': 6.4.1
+      '@codemirror/view': 6.34.1
+      '@lezer/common': 1.0.2
+      '@lezer/javascript': 1.4.1
+
+  '@codemirror/language@6.10.3':
+    dependencies:
+      '@codemirror/state': 6.4.1
+      '@codemirror/view': 6.34.1
+      '@lezer/common': 1.2.0
+      '@lezer/highlight': 1.2.1
+      '@lezer/lr': 1.3.1
+      style-mod: 4.0.0
+
+  '@codemirror/lint@6.1.0':
+    dependencies:
+      '@codemirror/state': 6.4.1
+      '@codemirror/view': 6.34.1
+      crelt: 1.0.5
+
+  '@codemirror/lint@6.4.2':
+    dependencies:
+      '@codemirror/state': 6.4.1
+      '@codemirror/view': 6.34.1
+      crelt: 1.0.6
+
+  '@codemirror/search@6.5.6':
+    dependencies:
+      '@codemirror/state': 6.4.1
+      '@codemirror/view': 6.34.1
+      crelt: 1.0.5
+
+  '@codemirror/state@6.4.1': {}
+
+  '@codemirror/view@6.34.1':
+    dependencies:
+      '@codemirror/state': 6.4.1
+      style-mod: 4.1.0
+      w3c-keyname: 2.2.6
+
+  '@csound/browser@6.18.7(eslint@9.13.0(jiti@1.21.0))':
+    dependencies:
+      comlink: 4.3.1
+      eslint-plugin-n: 15.6.1(eslint@9.13.0(jiti@1.21.0))
+      eventemitter3: 4.0.7
+      google-closure-compiler: 20221102.0.1
+      google-closure-library: 20221102.0.0
+      path-browserify: 1.0.1
+      rambda: 7.4.0
+      rimraf: 3.0.2
+      standardized-audio-context: 25.3.37
+      text-encoding-shim: 1.0.5
+      unmute-ios-audio: 3.3.0
+      web-midi-api: 2.2.2
+    transitivePeerDependencies:
+      - eslint
+
+  '@dependents/detective-less@4.1.0':
+    dependencies:
+      gonzales-pe: 4.3.0
+      node-source-walk: 6.0.2
+
+  '@docsearch/css@3.6.2': {}
+
+  '@docsearch/react@3.6.2(@algolia/client-search@4.22.0)(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0)':
+    dependencies:
+      '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.22.0)(search-insights@2.13.0)
+      '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.22.0)(algoliasearch@4.22.0)
+      '@docsearch/css': 3.6.2
+      algoliasearch: 4.22.0
+    optionalDependencies:
+      '@types/react': 18.3.11
+      react: 18.3.1
+      react-dom: 18.3.1(react@18.3.1)
+      search-insights: 2.13.0
+    transitivePeerDependencies:
+      - '@algolia/client-search'
+
+  '@emnapi/runtime@1.3.1':
+    dependencies:
+      tslib: 2.8.0
+    optional: true
+
+  '@esbuild/aix-ppc64@0.21.5':
+    optional: true
+
+  '@esbuild/android-arm64@0.21.5':
+    optional: true
+
+  '@esbuild/android-arm@0.21.5':
+    optional: true
+
+  '@esbuild/android-x64@0.21.5':
+    optional: true
+
+  '@esbuild/darwin-arm64@0.21.5':
+    optional: true
+
+  '@esbuild/darwin-x64@0.21.5':
+    optional: true
+
+  '@esbuild/freebsd-arm64@0.21.5':
+    optional: true
+
+  '@esbuild/freebsd-x64@0.21.5':
+    optional: true
+
+  '@esbuild/linux-arm64@0.21.5':
+    optional: true
+
+  '@esbuild/linux-arm@0.21.5':
+    optional: true
+
+  '@esbuild/linux-ia32@0.21.5':
+    optional: true
+
+  '@esbuild/linux-loong64@0.21.5':
+    optional: true
+
+  '@esbuild/linux-mips64el@0.21.5':
+    optional: true
+
+  '@esbuild/linux-ppc64@0.21.5':
+    optional: true
+
+  '@esbuild/linux-riscv64@0.21.5':
+    optional: true
+
+  '@esbuild/linux-s390x@0.21.5':
+    optional: true
+
+  '@esbuild/linux-x64@0.21.5':
+    optional: true
+
+  '@esbuild/netbsd-x64@0.21.5':
+    optional: true
+
+  '@esbuild/openbsd-x64@0.21.5':
+    optional: true
+
+  '@esbuild/sunos-x64@0.21.5':
+    optional: true
+
+  '@esbuild/win32-arm64@0.21.5':
+    optional: true
+
+  '@esbuild/win32-ia32@0.21.5':
+    optional: true
+
+  '@esbuild/win32-x64@0.21.5':
+    optional: true
+
+  '@eslint-community/eslint-utils@4.4.0(eslint@8.57.1)':
+    dependencies:
+      eslint: 8.57.1
+      eslint-visitor-keys: 3.4.3
+
+  '@eslint-community/eslint-utils@4.4.0(eslint@9.13.0(jiti@1.21.0))':
+    dependencies:
+      eslint: 9.13.0(jiti@1.21.0)
+      eslint-visitor-keys: 3.4.3
+
+  '@eslint-community/regexpp@4.11.1': {}
+
+  '@eslint/config-array@0.18.0':
+    dependencies:
+      '@eslint/object-schema': 2.1.4
+      debug: 4.3.7
+      minimatch: 3.1.2
+    transitivePeerDependencies:
+      - supports-color
+
+  '@eslint/core@0.7.0': {}
+
+  '@eslint/eslintrc@2.1.4':
+    dependencies:
+      ajv: 6.12.6
+      debug: 4.3.7
+      espree: 9.6.1
+      globals: 13.24.0
+      ignore: 5.2.4
+      import-fresh: 3.3.0
+      js-yaml: 4.1.0
+      minimatch: 3.1.2
+      strip-json-comments: 3.1.1
+    transitivePeerDependencies:
+      - supports-color
+
+  '@eslint/eslintrc@3.1.0':
+    dependencies:
+      ajv: 6.12.6
+      debug: 4.3.7
+      espree: 10.2.0
+      globals: 14.0.0
+      ignore: 5.2.4
+      import-fresh: 3.3.0
+      js-yaml: 4.1.0
+      minimatch: 3.1.2
+      strip-json-comments: 3.1.1
+    transitivePeerDependencies:
+      - supports-color
+
+  '@eslint/js@8.57.1': {}
+
+  '@eslint/js@9.13.0': {}
+
+  '@eslint/object-schema@2.1.4': {}
+
+  '@eslint/plugin-kit@0.2.1':
+    dependencies:
+      levn: 0.4.1
+
+  '@headlessui/react@1.7.19(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+    dependencies:
+      '@tanstack/react-virtual': 3.10.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+      client-only: 0.0.1
+      react: 18.3.1
+      react-dom: 18.3.1(react@18.3.1)
+
+  '@heroicons/react@2.1.5(react@18.3.1)':
+    dependencies:
+      react: 18.3.1
+
+  '@humanfs/core@0.19.0': {}
+
+  '@humanfs/node@0.16.5':
+    dependencies:
+      '@humanfs/core': 0.19.0
+      '@humanwhocodes/retry': 0.3.1
+
+  '@humanwhocodes/config-array@0.13.0':
+    dependencies:
+      '@humanwhocodes/object-schema': 2.0.3
+      debug: 4.3.7
+      minimatch: 3.1.2
+    transitivePeerDependencies:
+      - supports-color
+
+  '@humanwhocodes/module-importer@1.0.1': {}
+
+  '@humanwhocodes/object-schema@2.0.3': {}
+
+  '@humanwhocodes/retry@0.3.1': {}
+
+  '@hutson/parse-repository-url@3.0.2': {}
+
+  '@img/sharp-darwin-arm64@0.33.5':
+    optionalDependencies:
+      '@img/sharp-libvips-darwin-arm64': 1.0.4
+    optional: true
+
+  '@img/sharp-darwin-x64@0.33.5':
+    optionalDependencies:
+      '@img/sharp-libvips-darwin-x64': 1.0.4
+    optional: true
+
+  '@img/sharp-libvips-darwin-arm64@1.0.4':
+    optional: true
+
+  '@img/sharp-libvips-darwin-x64@1.0.4':
+    optional: true
+
+  '@img/sharp-libvips-linux-arm64@1.0.4':
+    optional: true
+
+  '@img/sharp-libvips-linux-arm@1.0.5':
+    optional: true
+
+  '@img/sharp-libvips-linux-s390x@1.0.4':
+    optional: true
+
+  '@img/sharp-libvips-linux-x64@1.0.4':
+    optional: true
+
+  '@img/sharp-libvips-linuxmusl-arm64@1.0.4':
+    optional: true
+
+  '@img/sharp-libvips-linuxmusl-x64@1.0.4':
+    optional: true
+
+  '@img/sharp-linux-arm64@0.33.5':
+    optionalDependencies:
+      '@img/sharp-libvips-linux-arm64': 1.0.4
+    optional: true
+
+  '@img/sharp-linux-arm@0.33.5':
+    optionalDependencies:
+      '@img/sharp-libvips-linux-arm': 1.0.5
+    optional: true
+
+  '@img/sharp-linux-s390x@0.33.5':
+    optionalDependencies:
+      '@img/sharp-libvips-linux-s390x': 1.0.4
+    optional: true
+
+  '@img/sharp-linux-x64@0.33.5':
+    optionalDependencies:
+      '@img/sharp-libvips-linux-x64': 1.0.4
+    optional: true
+
+  '@img/sharp-linuxmusl-arm64@0.33.5':
+    optionalDependencies:
+      '@img/sharp-libvips-linuxmusl-arm64': 1.0.4
+    optional: true
+
+  '@img/sharp-linuxmusl-x64@0.33.5':
+    optionalDependencies:
+      '@img/sharp-libvips-linuxmusl-x64': 1.0.4
+    optional: true
+
+  '@img/sharp-wasm32@0.33.5':
+    dependencies:
+      '@emnapi/runtime': 1.3.1
+    optional: true
+
+  '@img/sharp-win32-ia32@0.33.5':
+    optional: true
+
+  '@img/sharp-win32-x64@0.33.5':
+    optional: true
+
+  '@isaacs/cliui@8.0.2':
+    dependencies:
+      string-width: 5.1.2
+      string-width-cjs: string-width@4.2.3
+      strip-ansi: 7.1.0
+      strip-ansi-cjs: strip-ansi@6.0.1
+      wrap-ansi: 8.1.0
+      wrap-ansi-cjs: wrap-ansi@7.0.0
+
+  '@isaacs/string-locale-compare@1.1.0': {}
+
+  '@jest/schemas@29.6.3':
+    dependencies:
+      '@sinclair/typebox': 0.27.8
+
+  '@jridgewell/gen-mapping@0.3.2':
+    dependencies:
+      '@jridgewell/set-array': 1.1.2
+      '@jridgewell/sourcemap-codec': 1.5.0
+      '@jridgewell/trace-mapping': 0.3.17
+
+  '@jridgewell/gen-mapping@0.3.5':
+    dependencies:
+      '@jridgewell/set-array': 1.2.1
+      '@jridgewell/sourcemap-codec': 1.5.0
+      '@jridgewell/trace-mapping': 0.3.25
+
+  '@jridgewell/resolve-uri@3.1.0': {}
+
+  '@jridgewell/resolve-uri@3.1.2': {}
+
+  '@jridgewell/set-array@1.1.2': {}
+
+  '@jridgewell/set-array@1.2.1': {}
+
+  '@jridgewell/source-map@0.3.6':
+    dependencies:
+      '@jridgewell/gen-mapping': 0.3.5
+      '@jridgewell/trace-mapping': 0.3.25
+
+  '@jridgewell/sourcemap-codec@1.4.14': {}
+
+  '@jridgewell/sourcemap-codec@1.5.0': {}
+
+  '@jridgewell/trace-mapping@0.3.17':
+    dependencies:
+      '@jridgewell/resolve-uri': 3.1.0
+      '@jridgewell/sourcemap-codec': 1.4.14
+
+  '@jridgewell/trace-mapping@0.3.25':
+    dependencies:
+      '@jridgewell/resolve-uri': 3.1.2
+      '@jridgewell/sourcemap-codec': 1.5.0
+
+  '@jsdoc/salty@0.2.3':
+    dependencies:
+      lodash: 4.17.21
+
+  '@lerna/create@8.1.8(encoding@0.1.13)(typescript@5.3.3)':
+    dependencies:
+      '@npmcli/arborist': 7.5.4
+      '@npmcli/package-json': 5.2.0
+      '@npmcli/run-script': 8.1.0
+      '@nx/devkit': 17.2.8(nx@17.2.8)
+      '@octokit/plugin-enterprise-rest': 6.0.1
+      '@octokit/rest': 19.0.11(encoding@0.1.13)
+      aproba: 2.0.0
+      byte-size: 8.1.1
+      chalk: 4.1.0
+      clone-deep: 4.0.1
+      cmd-shim: 6.0.3
+      color-support: 1.1.3
+      columnify: 1.6.0
+      console-control-strings: 1.1.0
+      conventional-changelog-core: 5.0.1
+      conventional-recommended-bump: 7.0.1
+      cosmiconfig: 8.3.6(typescript@5.3.3)
+      dedent: 1.5.3
+      execa: 5.0.0
+      fs-extra: 11.2.0
+      get-stream: 6.0.0
+      git-url-parse: 14.0.0
+      glob-parent: 6.0.2
+      globby: 11.1.0
+      graceful-fs: 4.2.11
+      has-unicode: 2.0.1
+      ini: 1.3.8
+      init-package-json: 6.0.3
+      inquirer: 8.2.5
+      is-ci: 3.0.1
+      is-stream: 2.0.0
+      js-yaml: 4.1.0
+      libnpmpublish: 9.0.9
+      load-json-file: 6.2.0
+      lodash: 4.17.21
+      make-dir: 4.0.0
+      minimatch: 3.0.5
+      multimatch: 5.0.0
+      node-fetch: 2.6.7(encoding@0.1.13)
+      npm-package-arg: 11.0.2
+      npm-packlist: 8.0.2
+      npm-registry-fetch: 17.1.0
+      nx: 17.2.8
+      p-map: 4.0.0
+      p-map-series: 2.1.0
+      p-queue: 6.6.2
+      p-reduce: 2.1.0
+      pacote: 18.0.6
+      pify: 5.0.0
+      read-cmd-shim: 4.0.0
+      resolve-from: 5.0.0
+      rimraf: 4.4.1
+      semver: 7.6.3
+      set-blocking: 2.0.0
+      signal-exit: 3.0.7
+      slash: 3.0.0
+      ssri: 10.0.6
+      string-width: 4.2.3
+      strip-ansi: 6.0.1
+      strong-log-transformer: 2.1.0
+      tar: 6.2.1
+      temp-dir: 1.0.0
+      upath: 2.0.1
+      uuid: 10.0.0
+      validate-npm-package-license: 3.0.4
+      validate-npm-package-name: 5.0.1
+      wide-align: 1.1.5
+      write-file-atomic: 5.0.1
+      write-pkg: 4.0.0
+      yargs: 17.7.2
+      yargs-parser: 21.1.1
+    transitivePeerDependencies:
+      - '@swc-node/register'
+      - '@swc/core'
+      - babel-plugin-macros
+      - bluebird
+      - debug
+      - encoding
+      - supports-color
+      - typescript
+
+  '@lezer/common@1.0.2': {}
+
+  '@lezer/common@1.2.0': {}
+
+  '@lezer/highlight@1.2.1':
+    dependencies:
+      '@lezer/common': 1.2.0
+
+  '@lezer/javascript@1.4.1':
+    dependencies:
+      '@lezer/highlight': 1.2.1
+      '@lezer/lr': 1.3.1
+
+  '@lezer/lr@1.3.1':
+    dependencies:
+      '@lezer/common': 1.2.0
+
+  '@mdx-js/mdx@3.1.0(acorn@8.13.0)':
+    dependencies:
+      '@types/estree': 1.0.6
+      '@types/estree-jsx': 1.0.5
+      '@types/hast': 3.0.4
+      '@types/mdx': 2.0.13
+      collapse-white-space: 2.1.0
+      devlop: 1.1.0
+      estree-util-is-identifier-name: 3.0.0
+      estree-util-scope: 1.0.0
+      estree-walker: 3.0.3
+      hast-util-to-jsx-runtime: 2.3.2
+      markdown-extensions: 2.0.0
+      recma-build-jsx: 1.0.0
+      recma-jsx: 1.0.0(acorn@8.13.0)
+      recma-stringify: 1.0.0
+      rehype-recma: 1.0.0
+      remark-mdx: 3.1.0
+      remark-parse: 11.0.0
+      remark-rehype: 11.1.1
+      source-map: 0.7.4
+      unified: 11.0.5
+      unist-util-position-from-estree: 2.0.0
+      unist-util-stringify-position: 4.0.0
+      unist-util-visit: 5.0.0
+      vfile: 6.0.3
+    transitivePeerDependencies:
+      - acorn
+      - supports-color
+
+  '@nanostores/persistent@0.9.1(nanostores@0.9.5)':
+    dependencies:
+      nanostores: 0.9.5
+
+  '@nanostores/react@0.7.3(nanostores@0.9.5)(react@18.3.1)':
+    dependencies:
+      nanostores: 0.9.5
+      react: 18.3.1
+
+  '@nodelib/fs.scandir@2.1.5':
+    dependencies:
+      '@nodelib/fs.stat': 2.0.5
+      run-parallel: 1.2.0
+
+  '@nodelib/fs.stat@2.0.5': {}
+
+  '@nodelib/fs.walk@1.2.8':
+    dependencies:
+      '@nodelib/fs.scandir': 2.1.5
+      fastq: 1.15.0
+
+  '@npmcli/agent@2.2.2':
+    dependencies:
+      agent-base: 7.1.1
+      http-proxy-agent: 7.0.2
+      https-proxy-agent: 7.0.5
+      lru-cache: 10.4.3
+      socks-proxy-agent: 8.0.4
+    transitivePeerDependencies:
+      - supports-color
+
+  '@npmcli/arborist@7.5.4':
+    dependencies:
+      '@isaacs/string-locale-compare': 1.1.0
+      '@npmcli/fs': 3.1.1
+      '@npmcli/installed-package-contents': 2.1.0
+      '@npmcli/map-workspaces': 3.0.6
+      '@npmcli/metavuln-calculator': 7.1.1
+      '@npmcli/name-from-folder': 2.0.0
+      '@npmcli/node-gyp': 3.0.0
+      '@npmcli/package-json': 5.2.0
+      '@npmcli/query': 3.1.0
+      '@npmcli/redact': 2.0.1
+      '@npmcli/run-script': 8.1.0
+      bin-links: 4.0.4
+      cacache: 18.0.4
+      common-ancestor-path: 1.0.1
+      hosted-git-info: 7.0.2
+      json-parse-even-better-errors: 3.0.2
+      json-stringify-nice: 1.1.4
+      lru-cache: 10.4.3
+      minimatch: 9.0.5
+      nopt: 7.2.1
+      npm-install-checks: 6.3.0
+      npm-package-arg: 11.0.2
+      npm-pick-manifest: 9.1.0
+      npm-registry-fetch: 17.1.0
+      pacote: 18.0.6
+      parse-conflict-json: 3.0.1
+      proc-log: 4.2.0
+      proggy: 2.0.0
+      promise-all-reject-late: 1.0.1
+      promise-call-limit: 3.0.2
+      read-package-json-fast: 3.0.2
+      semver: 7.6.3
+      ssri: 10.0.6
+      treeverse: 3.0.0
+      walk-up-path: 3.0.1
+    transitivePeerDependencies:
+      - bluebird
+      - supports-color
+
+  '@npmcli/fs@3.1.1':
+    dependencies:
+      semver: 7.6.3
+
+  '@npmcli/git@5.0.8':
+    dependencies:
+      '@npmcli/promise-spawn': 7.0.2
+      ini: 4.1.3
+      lru-cache: 10.4.3
+      npm-pick-manifest: 9.1.0
+      proc-log: 4.2.0
+      promise-inflight: 1.0.1
+      promise-retry: 2.0.1
+      semver: 7.6.3
+      which: 4.0.0
+    transitivePeerDependencies:
+      - bluebird
+
+  '@npmcli/installed-package-contents@2.1.0':
+    dependencies:
+      npm-bundled: 3.0.1
+      npm-normalize-package-bin: 3.0.1
+
+  '@npmcli/map-workspaces@3.0.6':
+    dependencies:
+      '@npmcli/name-from-folder': 2.0.0
+      glob: 10.4.5
+      minimatch: 9.0.5
+      read-package-json-fast: 3.0.2
+
+  '@npmcli/metavuln-calculator@7.1.1':
+    dependencies:
+      cacache: 18.0.4
+      json-parse-even-better-errors: 3.0.2
+      pacote: 18.0.6
+      proc-log: 4.2.0
+      semver: 7.6.3
+    transitivePeerDependencies:
+      - bluebird
+      - supports-color
+
+  '@npmcli/name-from-folder@2.0.0': {}
+
+  '@npmcli/node-gyp@3.0.0': {}
+
+  '@npmcli/package-json@5.2.0':
+    dependencies:
+      '@npmcli/git': 5.0.8
+      glob: 10.4.5
+      hosted-git-info: 7.0.2
+      json-parse-even-better-errors: 3.0.2
+      normalize-package-data: 6.0.2
+      proc-log: 4.2.0
+      semver: 7.6.3
+    transitivePeerDependencies:
+      - bluebird
+
+  '@npmcli/promise-spawn@7.0.2':
+    dependencies:
+      which: 4.0.0
+
+  '@npmcli/query@3.1.0':
+    dependencies:
+      postcss-selector-parser: 6.1.2
+
+  '@npmcli/redact@2.0.1': {}
+
+  '@npmcli/run-script@8.1.0':
+    dependencies:
+      '@npmcli/node-gyp': 3.0.0
+      '@npmcli/package-json': 5.2.0
+      '@npmcli/promise-spawn': 7.0.2
+      node-gyp: 10.2.0
+      proc-log: 4.2.0
+      which: 4.0.0
+    transitivePeerDependencies:
+      - bluebird
+      - supports-color
+
+  '@nrwl/devkit@17.2.8(nx@17.2.8)':
+    dependencies:
+      '@nx/devkit': 17.2.8(nx@17.2.8)
+    transitivePeerDependencies:
+      - nx
+
+  '@nrwl/tao@17.2.8':
+    dependencies:
+      nx: 17.2.8
+      tslib: 2.8.0
+    transitivePeerDependencies:
+      - '@swc-node/register'
+      - '@swc/core'
+      - debug
+
+  '@nx/devkit@17.2.8(nx@17.2.8)':
+    dependencies:
+      '@nrwl/devkit': 17.2.8(nx@17.2.8)
+      ejs: 3.1.8
+      enquirer: 2.3.6
+      ignore: 5.2.4
+      nx: 17.2.8
+      semver: 7.5.3
+      tmp: 0.2.1
+      tslib: 2.8.0
+
+  '@nx/nx-darwin-arm64@17.2.8':
+    optional: true
+
+  '@nx/nx-darwin-x64@17.2.8':
+    optional: true
+
+  '@nx/nx-freebsd-x64@17.2.8':
+    optional: true
+
+  '@nx/nx-linux-arm-gnueabihf@17.2.8':
+    optional: true
+
+  '@nx/nx-linux-arm64-gnu@17.2.8':
+    optional: true
+
+  '@nx/nx-linux-arm64-musl@17.2.8':
+    optional: true
+
+  '@nx/nx-linux-x64-gnu@17.2.8':
+    optional: true
+
+  '@nx/nx-linux-x64-musl@17.2.8':
+    optional: true
+
+  '@nx/nx-win32-arm64-msvc@17.2.8':
+    optional: true
+
+  '@nx/nx-win32-x64-msvc@17.2.8':
+    optional: true
+
+  '@octokit/auth-token@3.0.3':
+    dependencies:
+      '@octokit/types': 9.0.0
+
+  '@octokit/core@4.2.4(encoding@0.1.13)':
+    dependencies:
+      '@octokit/auth-token': 3.0.3
+      '@octokit/graphql': 5.0.5(encoding@0.1.13)
+      '@octokit/request': 6.2.3(encoding@0.1.13)
+      '@octokit/request-error': 3.0.3
+      '@octokit/types': 9.0.0
+      before-after-hook: 2.2.3
+      universal-user-agent: 6.0.0
+    transitivePeerDependencies:
+      - encoding
+
+  '@octokit/endpoint@7.0.5':
+    dependencies:
+      '@octokit/types': 9.0.0
+      is-plain-object: 5.0.0
+      universal-user-agent: 6.0.0
+
+  '@octokit/graphql@5.0.5(encoding@0.1.13)':
+    dependencies:
+      '@octokit/request': 6.2.3(encoding@0.1.13)
+      '@octokit/types': 9.0.0
+      universal-user-agent: 6.0.0
+    transitivePeerDependencies:
+      - encoding
+
+  '@octokit/openapi-types@16.0.0': {}
+
+  '@octokit/openapi-types@18.1.1': {}
+
+  '@octokit/plugin-enterprise-rest@6.0.1': {}
+
+  '@octokit/plugin-paginate-rest@6.1.2(@octokit/core@4.2.4(encoding@0.1.13))':
+    dependencies:
+      '@octokit/core': 4.2.4(encoding@0.1.13)
+      '@octokit/tsconfig': 1.0.2
+      '@octokit/types': 9.3.2
+
+  '@octokit/plugin-request-log@1.0.4(@octokit/core@4.2.4(encoding@0.1.13))':
+    dependencies:
+      '@octokit/core': 4.2.4(encoding@0.1.13)
+
+  '@octokit/plugin-rest-endpoint-methods@7.2.3(@octokit/core@4.2.4(encoding@0.1.13))':
+    dependencies:
+      '@octokit/core': 4.2.4(encoding@0.1.13)
+      '@octokit/types': 10.0.0
+
+  '@octokit/request-error@3.0.3':
+    dependencies:
+      '@octokit/types': 9.0.0
+      deprecation: 2.3.1
+      once: 1.4.0
+
+  '@octokit/request@6.2.3(encoding@0.1.13)':
+    dependencies:
+      '@octokit/endpoint': 7.0.5
+      '@octokit/request-error': 3.0.3
+      '@octokit/types': 9.0.0
+      is-plain-object: 5.0.0
+      node-fetch: 2.6.8(encoding@0.1.13)
+      universal-user-agent: 6.0.0
+    transitivePeerDependencies:
+      - encoding
+
+  '@octokit/rest@19.0.11(encoding@0.1.13)':
+    dependencies:
+      '@octokit/core': 4.2.4(encoding@0.1.13)
+      '@octokit/plugin-paginate-rest': 6.1.2(@octokit/core@4.2.4(encoding@0.1.13))
+      '@octokit/plugin-request-log': 1.0.4(@octokit/core@4.2.4(encoding@0.1.13))
+      '@octokit/plugin-rest-endpoint-methods': 7.2.3(@octokit/core@4.2.4(encoding@0.1.13))
+    transitivePeerDependencies:
+      - encoding
+
+  '@octokit/tsconfig@1.0.2': {}
+
+  '@octokit/types@10.0.0':
+    dependencies:
+      '@octokit/openapi-types': 18.1.1
+
+  '@octokit/types@9.0.0':
+    dependencies:
+      '@octokit/openapi-types': 16.0.0
+
+  '@octokit/types@9.3.2':
+    dependencies:
+      '@octokit/openapi-types': 18.1.1
+
+  '@oslojs/encoding@1.1.0': {}
+
+  '@pkgjs/parseargs@0.11.0':
+    optional: true
+
+  '@polka/url@1.0.0-next.28': {}
+
+  '@replit/codemirror-emacs@6.1.0(@codemirror/autocomplete@6.18.1(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)(@lezer/common@1.0.2))(@codemirror/commands@6.7.0)(@codemirror/search@6.5.6)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
+    dependencies:
+      '@codemirror/autocomplete': 6.18.1(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)(@lezer/common@1.0.2)
+      '@codemirror/commands': 6.7.0
+      '@codemirror/search': 6.5.6
+      '@codemirror/state': 6.4.1
+      '@codemirror/view': 6.34.1
+
+  '@replit/codemirror-vim@6.2.1(@codemirror/commands@6.7.0)(@codemirror/language@6.10.3)(@codemirror/search@6.5.6)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
+    dependencies:
+      '@codemirror/commands': 6.7.0
+      '@codemirror/language': 6.10.3
+      '@codemirror/search': 6.5.6
+      '@codemirror/state': 6.4.1
+      '@codemirror/view': 6.34.1
+
+  '@replit/codemirror-vscode-keymap@6.0.2(@codemirror/autocomplete@6.18.1(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)(@lezer/common@1.0.2))(@codemirror/commands@6.7.0)(@codemirror/language@6.10.3)(@codemirror/lint@6.4.2)(@codemirror/search@6.5.6)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
+    dependencies:
+      '@codemirror/autocomplete': 6.18.1(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)(@lezer/common@1.0.2)
+      '@codemirror/commands': 6.7.0
+      '@codemirror/language': 6.10.3
+      '@codemirror/lint': 6.4.2
+      '@codemirror/search': 6.5.6
+      '@codemirror/state': 6.4.1
+      '@codemirror/view': 6.34.1
+
+  '@rollup/plugin-babel@5.3.1(@babel/core@7.25.8)(@types/babel__core@7.20.5)(rollup@2.79.2)':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/helper-module-imports': 7.25.7
+      '@rollup/pluginutils': 3.1.0(rollup@2.79.2)
+      rollup: 2.79.2
+    optionalDependencies:
+      '@types/babel__core': 7.20.5
+    transitivePeerDependencies:
+      - supports-color
+
+  '@rollup/plugin-node-resolve@11.2.1(rollup@2.79.2)':
+    dependencies:
+      '@rollup/pluginutils': 3.1.0(rollup@2.79.2)
       '@types/resolve': 1.17.1
       builtin-modules: 3.3.0
       deepmerge: 4.3.1
       is-module: 1.0.0
       resolve: 1.22.8
-      rollup: 2.79.1
-    dev: true
+      rollup: 2.79.2
 
-  /@rollup/plugin-replace@2.4.2(rollup@2.79.1):
-    resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==}
-    peerDependencies:
-      rollup: ^1.20.0 || ^2.0.0
+  '@rollup/plugin-replace@2.4.2(rollup@2.79.2)':
     dependencies:
-      '@rollup/pluginutils': 3.1.0(rollup@2.79.1)
+      '@rollup/pluginutils': 3.1.0(rollup@2.79.2)
       magic-string: 0.25.9
-      rollup: 2.79.1
-    dev: true
+      rollup: 2.79.2
 
-  /@rollup/plugin-replace@5.0.5:
-    resolution: {integrity: sha512-rYO4fOi8lMaTg/z5Jb+hKnrHHVn8j2lwkqwyS4kTRhKyWOLf2wST2sWXr4WzWiTcoHTp2sTjqUbqIj2E39slKQ==}
-    engines: {node: '>=14.0.0'}
-    peerDependencies:
-      rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
-    peerDependenciesMeta:
-      rollup:
-        optional: true
+  '@rollup/plugin-replace@5.0.7(rollup@4.24.0)':
     dependencies:
-      '@rollup/pluginutils': 5.1.0
-      magic-string: 0.30.5
-    dev: true
+      '@rollup/pluginutils': 5.1.2(rollup@4.24.0)
+      magic-string: 0.30.12
+    optionalDependencies:
+      rollup: 4.24.0
 
-  /@rollup/pluginutils@3.1.0(rollup@2.79.1):
-    resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==}
-    engines: {node: '>= 8.0.0'}
-    peerDependencies:
-      rollup: ^1.20.0||^2.0.0
+  '@rollup/pluginutils@3.1.0(rollup@2.79.2)':
     dependencies:
       '@types/estree': 0.0.39
       estree-walker: 1.0.1
       picomatch: 2.3.1
-      rollup: 2.79.1
-    dev: true
+      rollup: 2.79.2
 
-  /@rollup/pluginutils@5.1.0:
-    resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==}
-    engines: {node: '>=14.0.0'}
-    peerDependencies:
-      rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
-    peerDependenciesMeta:
-      rollup:
-        optional: true
+  '@rollup/pluginutils@5.1.2(rollup@2.79.2)':
     dependencies:
-      '@types/estree': 1.0.0
+      '@types/estree': 1.0.6
       estree-walker: 2.0.2
       picomatch: 2.3.1
-    dev: true
+    optionalDependencies:
+      rollup: 2.79.2
 
-  /@rollup/rollup-android-arm-eabi@4.13.0:
-    resolution: {integrity: sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==}
-    cpu: [arm]
-    os: [android]
-    requiresBuild: true
-    optional: true
-
-  /@rollup/rollup-android-arm-eabi@4.9.2:
-    resolution: {integrity: sha512-RKzxFxBHq9ysZ83fn8Iduv3A283K7zPPYuhL/z9CQuyFrjwpErJx0h4aeb/bnJ+q29GRLgJpY66ceQ/Wcsn3wA==}
-    cpu: [arm]
-    os: [android]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@rollup/rollup-android-arm64@4.13.0:
-    resolution: {integrity: sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==}
-    cpu: [arm64]
-    os: [android]
-    requiresBuild: true
-    optional: true
-
-  /@rollup/rollup-android-arm64@4.9.2:
-    resolution: {integrity: sha512-yZ+MUbnwf3SHNWQKJyWh88ii2HbuHCFQnAYTeeO1Nb8SyEiWASEi5dQUygt3ClHWtA9My9RQAYkjvrsZ0WK8Xg==}
-    cpu: [arm64]
-    os: [android]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@rollup/rollup-darwin-arm64@4.13.0:
-    resolution: {integrity: sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==}
-    cpu: [arm64]
-    os: [darwin]
-    requiresBuild: true
-    optional: true
-
-  /@rollup/rollup-darwin-arm64@4.9.2:
-    resolution: {integrity: sha512-vqJ/pAUh95FLc/G/3+xPqlSBgilPnauVf2EXOQCZzhZJCXDXt/5A8mH/OzU6iWhb3CNk5hPJrh8pqJUPldN5zw==}
-    cpu: [arm64]
-    os: [darwin]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@rollup/rollup-darwin-x64@4.13.0:
-    resolution: {integrity: sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==}
-    cpu: [x64]
-    os: [darwin]
-    requiresBuild: true
-    optional: true
-
-  /@rollup/rollup-darwin-x64@4.9.2:
-    resolution: {integrity: sha512-otPHsN5LlvedOprd3SdfrRNhOahhVBwJpepVKUN58L0RnC29vOAej1vMEaVU6DadnpjivVsNTM5eNt0CcwTahw==}
-    cpu: [x64]
-    os: [darwin]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@rollup/rollup-linux-arm-gnueabihf@4.13.0:
-    resolution: {integrity: sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==}
-    cpu: [arm]
-    os: [linux]
-    requiresBuild: true
-    optional: true
-
-  /@rollup/rollup-linux-arm-gnueabihf@4.9.2:
-    resolution: {integrity: sha512-ewG5yJSp+zYKBYQLbd1CUA7b1lSfIdo9zJShNTyc2ZP1rcPrqyZcNlsHgs7v1zhgfdS+kW0p5frc0aVqhZCiYQ==}
-    cpu: [arm]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@rollup/rollup-linux-arm64-gnu@4.13.0:
-    resolution: {integrity: sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==}
-    cpu: [arm64]
-    os: [linux]
-    requiresBuild: true
-    optional: true
-
-  /@rollup/rollup-linux-arm64-gnu@4.9.2:
-    resolution: {integrity: sha512-pL6QtV26W52aCWTG1IuFV3FMPL1m4wbsRG+qijIvgFO/VBsiXJjDPE/uiMdHBAO6YcpV4KvpKtd0v3WFbaxBtg==}
-    cpu: [arm64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@rollup/rollup-linux-arm64-musl@4.13.0:
-    resolution: {integrity: sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==}
-    cpu: [arm64]
-    os: [linux]
-    requiresBuild: true
-    optional: true
-
-  /@rollup/rollup-linux-arm64-musl@4.9.2:
-    resolution: {integrity: sha512-On+cc5EpOaTwPSNetHXBuqylDW+765G/oqB9xGmWU3npEhCh8xu0xqHGUA+4xwZLqBbIZNcBlKSIYfkBm6ko7g==}
-    cpu: [arm64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@rollup/rollup-linux-riscv64-gnu@4.13.0:
-    resolution: {integrity: sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==}
-    cpu: [riscv64]
-    os: [linux]
-    requiresBuild: true
-    optional: true
-
-  /@rollup/rollup-linux-riscv64-gnu@4.9.2:
-    resolution: {integrity: sha512-Wnx/IVMSZ31D/cO9HSsU46FjrPWHqtdF8+0eyZ1zIB5a6hXaZXghUKpRrC4D5DcRTZOjml2oBhXoqfGYyXKipw==}
-    cpu: [riscv64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@rollup/rollup-linux-x64-gnu@4.13.0:
-    resolution: {integrity: sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==}
-    cpu: [x64]
-    os: [linux]
-    requiresBuild: true
-    optional: true
-
-  /@rollup/rollup-linux-x64-gnu@4.9.2:
-    resolution: {integrity: sha512-ym5x1cj4mUAMBummxxRkI4pG5Vht1QMsJexwGP8547TZ0sox9fCLDHw9KCH9c1FO5d9GopvkaJsBIOkTKxksdw==}
-    cpu: [x64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@rollup/rollup-linux-x64-musl@4.13.0:
-    resolution: {integrity: sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==}
-    cpu: [x64]
-    os: [linux]
-    requiresBuild: true
-    optional: true
-
-  /@rollup/rollup-linux-x64-musl@4.9.2:
-    resolution: {integrity: sha512-m0hYELHGXdYx64D6IDDg/1vOJEaiV8f1G/iO+tejvRCJNSwK4jJ15e38JQy5Q6dGkn1M/9KcyEOwqmlZ2kqaZg==}
-    cpu: [x64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@rollup/rollup-win32-arm64-msvc@4.13.0:
-    resolution: {integrity: sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==}
-    cpu: [arm64]
-    os: [win32]
-    requiresBuild: true
-    optional: true
-
-  /@rollup/rollup-win32-arm64-msvc@4.9.2:
-    resolution: {integrity: sha512-x1CWburlbN5JjG+juenuNa4KdedBdXLjZMp56nHFSHTOsb/MI2DYiGzLtRGHNMyydPGffGId+VgjOMrcltOksA==}
-    cpu: [arm64]
-    os: [win32]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@rollup/rollup-win32-ia32-msvc@4.13.0:
-    resolution: {integrity: sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==}
-    cpu: [ia32]
-    os: [win32]
-    requiresBuild: true
-    optional: true
-
-  /@rollup/rollup-win32-ia32-msvc@4.9.2:
-    resolution: {integrity: sha512-VVzCB5yXR1QlfsH1Xw1zdzQ4Pxuzv+CPr5qpElpKhVxlxD3CRdfubAG9mJROl6/dmj5gVYDDWk8sC+j9BI9/kQ==}
-    cpu: [ia32]
-    os: [win32]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@rollup/rollup-win32-x64-msvc@4.13.0:
-    resolution: {integrity: sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==}
-    cpu: [x64]
-    os: [win32]
-    requiresBuild: true
-    optional: true
-
-  /@rollup/rollup-win32-x64-msvc@4.9.2:
-    resolution: {integrity: sha512-SYRedJi+mweatroB+6TTnJYLts0L0bosg531xnQWtklOI6dezEagx4Q0qDyvRdK+qgdA3YZpjjGuPFtxBmddBA==}
-    cpu: [x64]
-    os: [win32]
-    requiresBuild: true
-    dev: true
-    optional: true
-
-  /@shikijs/core@1.2.0:
-    resolution: {integrity: sha512-OlFvx+nyr5C8zpcMBnSGir0YPD6K11uYhouqhNmm1qLiis4GA7SsGtu07r9gKS9omks8RtQqHrJL4S+lqWK01A==}
-    dev: false
-
-  /@sigstore/bundle@2.1.0:
-    resolution: {integrity: sha512-89uOo6yh/oxaU8AeOUnVrTdVMcGk9Q1hJa7Hkvalc6G3Z3CupWk4Xe9djSgJm9fMkH69s0P0cVHUoKSOemLdng==}
-    engines: {node: ^16.14.0 || >=18.0.0}
+  '@rollup/pluginutils@5.1.2(rollup@4.24.0)':
     dependencies:
-      '@sigstore/protobuf-specs': 0.2.1
-    dev: true
+      '@types/estree': 1.0.6
+      estree-walker: 2.0.2
+      picomatch: 2.3.1
+    optionalDependencies:
+      rollup: 4.24.0
 
-  /@sigstore/protobuf-specs@0.1.0:
-    resolution: {integrity: sha512-a31EnjuIDSX8IXBUib3cYLDRlPMU36AWX4xS8ysLaNu4ZzUesDiPt83pgrW2X1YLMe5L2HbDyaKK5BrL4cNKaQ==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
-    dev: true
+  '@rollup/rollup-android-arm-eabi@4.24.0':
+    optional: true
 
-  /@sigstore/protobuf-specs@0.2.1:
-    resolution: {integrity: sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
-    dev: true
+  '@rollup/rollup-android-arm64@4.24.0':
+    optional: true
 
-  /@sigstore/sign@2.2.0:
-    resolution: {integrity: sha512-AAbmnEHDQv6CSfrWA5wXslGtzLPtAtHZleKOgxdQYvx/s76Fk6T6ZVt7w2IGV9j1UrFeBocTTQxaXG2oRrDhYA==}
-    engines: {node: ^16.14.0 || >=18.0.0}
+  '@rollup/rollup-darwin-arm64@4.24.0':
+    optional: true
+
+  '@rollup/rollup-darwin-x64@4.24.0':
+    optional: true
+
+  '@rollup/rollup-linux-arm-gnueabihf@4.24.0':
+    optional: true
+
+  '@rollup/rollup-linux-arm-musleabihf@4.24.0':
+    optional: true
+
+  '@rollup/rollup-linux-arm64-gnu@4.24.0':
+    optional: true
+
+  '@rollup/rollup-linux-arm64-musl@4.24.0':
+    optional: true
+
+  '@rollup/rollup-linux-powerpc64le-gnu@4.24.0':
+    optional: true
+
+  '@rollup/rollup-linux-riscv64-gnu@4.24.0':
+    optional: true
+
+  '@rollup/rollup-linux-s390x-gnu@4.24.0':
+    optional: true
+
+  '@rollup/rollup-linux-x64-gnu@4.24.0':
+    optional: true
+
+  '@rollup/rollup-linux-x64-musl@4.24.0':
+    optional: true
+
+  '@rollup/rollup-win32-arm64-msvc@4.24.0':
+    optional: true
+
+  '@rollup/rollup-win32-ia32-msvc@4.24.0':
+    optional: true
+
+  '@rollup/rollup-win32-x64-msvc@4.24.0':
+    optional: true
+
+  '@rtsao/scc@1.1.0': {}
+
+  '@shikijs/core@1.22.0':
     dependencies:
-      '@sigstore/bundle': 2.1.0
-      '@sigstore/protobuf-specs': 0.2.1
-      make-fetch-happen: 13.0.0
+      '@shikijs/engine-javascript': 1.22.0
+      '@shikijs/engine-oniguruma': 1.22.0
+      '@shikijs/types': 1.22.0
+      '@shikijs/vscode-textmate': 9.3.0
+      '@types/hast': 3.0.4
+      hast-util-to-html: 9.0.3
+
+  '@shikijs/engine-javascript@1.22.0':
+    dependencies:
+      '@shikijs/types': 1.22.0
+      '@shikijs/vscode-textmate': 9.3.0
+      oniguruma-to-js: 0.4.3
+
+  '@shikijs/engine-oniguruma@1.22.0':
+    dependencies:
+      '@shikijs/types': 1.22.0
+      '@shikijs/vscode-textmate': 9.3.0
+
+  '@shikijs/types@1.22.0':
+    dependencies:
+      '@shikijs/vscode-textmate': 9.3.0
+      '@types/hast': 3.0.4
+
+  '@shikijs/vscode-textmate@9.3.0': {}
+
+  '@sigstore/bundle@2.3.2':
+    dependencies:
+      '@sigstore/protobuf-specs': 0.3.2
+
+  '@sigstore/core@1.1.0': {}
+
+  '@sigstore/protobuf-specs@0.3.2': {}
+
+  '@sigstore/sign@2.3.2':
+    dependencies:
+      '@sigstore/bundle': 2.3.2
+      '@sigstore/core': 1.1.0
+      '@sigstore/protobuf-specs': 0.3.2
+      make-fetch-happen: 13.0.1
+      proc-log: 4.2.0
+      promise-retry: 2.0.1
     transitivePeerDependencies:
       - supports-color
-    dev: true
 
-  /@sigstore/tuf@2.2.0:
-    resolution: {integrity: sha512-KKATZ5orWfqd9ZG6MN8PtCIx4eevWSuGRKQvofnWXRpyMyUEpmrzg5M5BrCpjM+NfZ0RbNGOh5tCz/P2uoRqOA==}
-    engines: {node: ^16.14.0 || >=18.0.0}
+  '@sigstore/tuf@2.3.4':
     dependencies:
-      '@sigstore/protobuf-specs': 0.2.1
-      tuf-js: 2.1.0
+      '@sigstore/protobuf-specs': 0.3.2
+      tuf-js: 2.2.1
     transitivePeerDependencies:
       - supports-color
-    dev: true
 
-  /@sinclair/typebox@0.27.8:
-    resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
-    dev: true
+  '@sigstore/verify@1.2.1':
+    dependencies:
+      '@sigstore/bundle': 2.3.2
+      '@sigstore/core': 1.1.0
+      '@sigstore/protobuf-specs': 0.3.2
 
-  /@supabase/functions-js@2.1.5:
-    resolution: {integrity: sha512-BNzC5XhCzzCaggJ8s53DP+WeHHGT/NfTsx2wUSSGKR2/ikLFQTBCDzMvGz/PxYMqRko/LwncQtKXGOYp1PkPaw==}
+  '@sinclair/typebox@0.27.8': {}
+
+  '@supabase/auth-js@2.65.1':
     dependencies:
       '@supabase/node-fetch': 2.6.15
-    dev: false
 
-  /@supabase/gotrue-js@2.62.0:
-    resolution: {integrity: sha512-4eBuZNXGOk7ewqJuHPYMnk8clCtEx6Hfnu6yHLjZlx7w18TqcojcTRUBZagErtpgwwdfzUwKbquexhbrpH/ysw==}
+  '@supabase/functions-js@2.4.3':
     dependencies:
       '@supabase/node-fetch': 2.6.15
-    dev: false
 
-  /@supabase/node-fetch@2.6.15:
-    resolution: {integrity: sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==}
-    engines: {node: 4.x || >=6.0.0}
+  '@supabase/node-fetch@2.6.15':
     dependencies:
       whatwg-url: 5.0.0
-    dev: false
 
-  /@supabase/postgrest-js@1.9.0:
-    resolution: {integrity: sha512-axP6cU69jDrLbfihJKQ6vU27tklD0gzb9idkMN363MtTXeJVt5DQNT3JnJ58JVNBdL74hgm26rAsFNvHk+tnSw==}
+  '@supabase/postgrest-js@1.16.2':
     dependencies:
       '@supabase/node-fetch': 2.6.15
-    dev: false
 
-  /@supabase/realtime-js@2.9.1:
-    resolution: {integrity: sha512-OxmY2qj+y6+KI4ifTL92j5+WYP+u5/PdThlYxVb0GMcMiMHfA7yIku9yaQNC5/oRdIvhuRpTMG/8/R40eB+8pA==}
+  '@supabase/realtime-js@2.10.7':
     dependencies:
       '@supabase/node-fetch': 2.6.15
-      '@types/phoenix': 1.5.4
-      ws: 8.16.0
+      '@types/phoenix': 1.6.5
+      '@types/ws': 8.5.12
+      ws: 8.18.0
     transitivePeerDependencies:
       - bufferutil
       - utf-8-validate
-    dev: false
 
-  /@supabase/storage-js@2.5.5:
-    resolution: {integrity: sha512-OpLoDRjFwClwc2cjTJZG8XviTiQH4Ik8sCiMK5v7et0MDu2QlXjCAW3ljxJB5+z/KazdMOTnySi+hysxWUPu3w==}
+  '@supabase/storage-js@2.7.1':
     dependencies:
       '@supabase/node-fetch': 2.6.15
-    dev: false
 
-  /@supabase/supabase-js@2.39.1:
-    resolution: {integrity: sha512-nz0aQPButJWjChX+bLXqvhHutfiOuiJwzibyJs0uhFrQ6JRDZZsl9+nX2jgyox2v2V+e4PEwbn/eaEOFVUr8iA==}
+  '@supabase/supabase-js@2.45.5':
     dependencies:
-      '@supabase/functions-js': 2.1.5
-      '@supabase/gotrue-js': 2.62.0
+      '@supabase/auth-js': 2.65.1
+      '@supabase/functions-js': 2.4.3
       '@supabase/node-fetch': 2.6.15
-      '@supabase/postgrest-js': 1.9.0
-      '@supabase/realtime-js': 2.9.1
-      '@supabase/storage-js': 2.5.5
+      '@supabase/postgrest-js': 1.16.2
+      '@supabase/realtime-js': 2.10.7
+      '@supabase/storage-js': 2.7.1
     transitivePeerDependencies:
       - bufferutil
       - utf-8-validate
-    dev: false
 
-  /@surma/rollup-plugin-off-main-thread@2.2.3:
-    resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==}
+  '@surma/rollup-plugin-off-main-thread@2.2.3':
     dependencies:
-      ejs: 3.1.9
+      ejs: 3.1.10
       json5: 2.2.3
       magic-string: 0.25.9
-      string.prototype.matchall: 4.0.10
-    dev: true
+      string.prototype.matchall: 4.0.11
 
-  /@tailwindcss/forms@0.5.7(tailwindcss@3.4.0):
-    resolution: {integrity: sha512-QE7X69iQI+ZXwldE+rzasvbJiyV/ju1FGHH0Qn2W3FKbuYtqp8LKcy6iSw79fVUT5/Vvf+0XgLCeYVG+UV6hOw==}
-    peerDependencies:
-      tailwindcss: '>=3.0.0 || >= 3.0.0-alpha.1'
+  '@tailwindcss/forms@0.5.9(tailwindcss@3.4.14)':
     dependencies:
       mini-svg-data-uri: 1.4.4
-      tailwindcss: 3.4.0
-    dev: false
+      tailwindcss: 3.4.14
 
-  /@tailwindcss/typography@0.5.10(tailwindcss@3.4.0):
-    resolution: {integrity: sha512-Pe8BuPJQJd3FfRnm6H0ulKIGoMEQS+Vq01R6M5aCrFB/ccR/shT+0kXLjouGC1gFLm9hopTFN+DMP0pfwRWzPw==}
-    peerDependencies:
-      tailwindcss: '>=3.0.0 || insiders'
+  '@tailwindcss/typography@0.5.15(tailwindcss@3.4.14)':
     dependencies:
       lodash.castarray: 4.4.0
       lodash.isplainobject: 4.0.6
       lodash.merge: 4.6.2
       postcss-selector-parser: 6.0.10
-      tailwindcss: 3.4.0
-    dev: false
+      tailwindcss: 3.4.14
 
-  /@tauri-apps/api@1.5.3:
-    resolution: {integrity: sha512-zxnDjHHKjOsrIzZm6nO5Xapb/BxqUq1tc7cGkFXsFkGTsSWgCPH1D8mm0XS9weJY2OaR73I3k3S+b7eSzJDfqA==}
-    engines: {node: '>= 14.6.0', npm: '>= 6.6.0', yarn: '>= 1.19.1'}
-    dev: false
+  '@tanstack/react-virtual@3.10.8(react-dom@18.3.1(react@18.3.1))(react@18.3.1)':
+    dependencies:
+      '@tanstack/virtual-core': 3.10.8
+      react: 18.3.1
+      react-dom: 18.3.1(react@18.3.1)
 
-  /@tauri-apps/cli-darwin-arm64@1.5.9:
-    resolution: {integrity: sha512-7C2Jf8f0gzv778mLYb7Eszqqv1bm9Wzews81MRTqKrUIcC+eZEtDXLex+JaEkEzFEUrgIafdOvMBVEavF030IA==}
-    engines: {node: '>= 10'}
-    cpu: [arm64]
-    os: [darwin]
-    requiresBuild: true
-    dev: true
+  '@tanstack/virtual-core@3.10.8': {}
+
+  '@tauri-apps/api@1.6.0': {}
+
+  '@tauri-apps/cli-darwin-arm64@1.6.3':
     optional: true
 
-  /@tauri-apps/cli-darwin-x64@1.5.9:
-    resolution: {integrity: sha512-LHKytpkofPYgH8RShWvwDa3hD1ws131x7g7zNasJPfOiCWLqYVQFUuQVmjEUt8+dpHe/P/err5h4z+YZru2d0A==}
-    engines: {node: '>= 10'}
-    cpu: [x64]
-    os: [darwin]
-    requiresBuild: true
-    dev: true
+  '@tauri-apps/cli-darwin-x64@1.6.3':
     optional: true
 
-  /@tauri-apps/cli-linux-arm-gnueabihf@1.5.9:
-    resolution: {integrity: sha512-teGK20IYKx+dVn8wFq/Lg57Q9ce7foq1KHSfyHi464LVt1T0V1rsmULSgZpQPPj/NYPF5BG78PcWYv64yH86jw==}
-    engines: {node: '>= 10'}
-    cpu: [arm]
-    os: [linux]
-    requiresBuild: true
-    dev: true
+  '@tauri-apps/cli-linux-arm-gnueabihf@1.6.3':
     optional: true
 
-  /@tauri-apps/cli-linux-arm64-gnu@1.5.9:
-    resolution: {integrity: sha512-onJ/DW5Crw38qVx+wquY4uBbfCxVhzhdJmlCYqnYyXsZZmSiPUfSyhV58y+5TYB0q1hG8eYdB5x8VAwzByhGzw==}
-    engines: {node: '>= 10'}
-    cpu: [arm64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
+  '@tauri-apps/cli-linux-arm64-gnu@1.6.3':
     optional: true
 
-  /@tauri-apps/cli-linux-arm64-musl@1.5.9:
-    resolution: {integrity: sha512-23AYoLD3acakLp9NtheKQDJl8F66eTOflxoPzdJNRy13hUSxb+W9qpz4rRA+CIzkjICFvO2i3UWjeV9QwDVpsQ==}
-    engines: {node: '>= 10'}
-    cpu: [arm64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
+  '@tauri-apps/cli-linux-arm64-musl@1.6.3':
     optional: true
 
-  /@tauri-apps/cli-linux-x64-gnu@1.5.9:
-    resolution: {integrity: sha512-9PQA1rE7gh41W2ylyKd5qOGOds55ymaYPml9KOpM0g+cxmCXa+8Wf9K5NKvACnJldJJ6cekWzIyB4eN6o5T+yQ==}
-    engines: {node: '>= 10'}
-    cpu: [x64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
+  '@tauri-apps/cli-linux-x64-gnu@1.6.3':
     optional: true
 
-  /@tauri-apps/cli-linux-x64-musl@1.5.9:
-    resolution: {integrity: sha512-5hdbNFeDsrJ/pXZ4cSQV4bJwUXPPxXxN3/pAtNUqIph7q+vLcBXOXIMoS64iuyaluJC59lhEwlWZFz+EPv0Hqg==}
-    engines: {node: '>= 10'}
-    cpu: [x64]
-    os: [linux]
-    requiresBuild: true
-    dev: true
+  '@tauri-apps/cli-linux-x64-musl@1.6.3':
     optional: true
 
-  /@tauri-apps/cli-win32-arm64-msvc@1.5.9:
-    resolution: {integrity: sha512-O18JufjSB3hSJYu5WWByONouGeX7DraLAtXLErsG1r/VS3zHd/zyuzycrVUaObNXk5bfGlIP0Ypt+RvZJILN2w==}
-    engines: {node: '>= 10'}
-    cpu: [arm64]
-    os: [win32]
-    requiresBuild: true
-    dev: true
+  '@tauri-apps/cli-win32-arm64-msvc@1.6.3':
     optional: true
 
-  /@tauri-apps/cli-win32-ia32-msvc@1.5.9:
-    resolution: {integrity: sha512-FQxtxTZu0JVBihfd/lmpxo7jyMOesjWQehfyVUqtgMfm5+Pvvw0Y+ZioeDi1TZkFVrT3QDYy8R4LqDLSZVMQRA==}
-    engines: {node: '>= 10'}
-    cpu: [ia32]
-    os: [win32]
-    requiresBuild: true
-    dev: true
+  '@tauri-apps/cli-win32-ia32-msvc@1.6.3':
     optional: true
 
-  /@tauri-apps/cli-win32-x64-msvc@1.5.9:
-    resolution: {integrity: sha512-EeI1+L518cIBLKw0qUFwnLIySBeSmPQjPLIlNwSukHSro4tAQPHycEVGgKrdToiCWgaZJBA0e5aRSds0Du2TWg==}
-    engines: {node: '>= 10'}
-    cpu: [x64]
-    os: [win32]
-    requiresBuild: true
-    dev: true
+  '@tauri-apps/cli-win32-x64-msvc@1.6.3':
     optional: true
 
-  /@tauri-apps/cli@1.5.9:
-    resolution: {integrity: sha512-knSt/9AvCTeyfC6wkyeouF9hBW/0Mzuw+5vBKEvzaGPQsfFJo1ZCp5FkdiZpGBBfnm09BhugasGRTGofzatfqQ==}
-    engines: {node: '>= 10'}
-    hasBin: true
+  '@tauri-apps/cli@1.6.3':
+    dependencies:
+      semver: 7.6.3
     optionalDependencies:
-      '@tauri-apps/cli-darwin-arm64': 1.5.9
-      '@tauri-apps/cli-darwin-x64': 1.5.9
-      '@tauri-apps/cli-linux-arm-gnueabihf': 1.5.9
-      '@tauri-apps/cli-linux-arm64-gnu': 1.5.9
-      '@tauri-apps/cli-linux-arm64-musl': 1.5.9
-      '@tauri-apps/cli-linux-x64-gnu': 1.5.9
-      '@tauri-apps/cli-linux-x64-musl': 1.5.9
-      '@tauri-apps/cli-win32-arm64-msvc': 1.5.9
-      '@tauri-apps/cli-win32-ia32-msvc': 1.5.9
-      '@tauri-apps/cli-win32-x64-msvc': 1.5.9
-    dev: true
+      '@tauri-apps/cli-darwin-arm64': 1.6.3
+      '@tauri-apps/cli-darwin-x64': 1.6.3
+      '@tauri-apps/cli-linux-arm-gnueabihf': 1.6.3
+      '@tauri-apps/cli-linux-arm64-gnu': 1.6.3
+      '@tauri-apps/cli-linux-arm64-musl': 1.6.3
+      '@tauri-apps/cli-linux-x64-gnu': 1.6.3
+      '@tauri-apps/cli-linux-x64-musl': 1.6.3
+      '@tauri-apps/cli-win32-arm64-msvc': 1.6.3
+      '@tauri-apps/cli-win32-ia32-msvc': 1.6.3
+      '@tauri-apps/cli-win32-x64-msvc': 1.6.3
 
-  /@tonaljs/abc-notation@4.8.0:
-    resolution: {integrity: sha512-JggT/DW4rMxu+q1WkeACrg52is3acp9zaW4LJmCheFi3CmLa63sy7/6mgKnlScTOvcpAyTcSytu0VbQHRXyBDA==}
+  '@tonaljs/abc-notation@4.8.0':
     dependencies:
       '@tonaljs/core': 4.10.0
-    dev: false
 
-  /@tonaljs/array@4.8.0:
-    resolution: {integrity: sha512-lWCUBRUVWtDV0kl/fjOgICRWzBYWZdJEk1h0vVzpuPaXW6Yz3JfjyKPtLbzYTkgSr1PqcjxVGNwxilz9c2NNkQ==}
+  '@tonaljs/array@4.8.0':
     dependencies:
       '@tonaljs/core': 4.10.0
-    dev: false
 
-  /@tonaljs/chord-detect@4.8.0:
-    resolution: {integrity: sha512-rpBHS2FKitIIodWI32LszeUfpq0of+0zqnU3CBc2/2UiYoyO9PmSs8UjzupKTIX/mHxOxq0ncDheT/ItB7QdNg==}
+  '@tonaljs/chord-detect@4.8.0':
     dependencies:
       '@tonaljs/chord-type': 4.8.0
       '@tonaljs/core': 4.10.0
       '@tonaljs/pcset': 4.8.1
-    dev: false
 
-  /@tonaljs/chord-type@4.8.0:
-    resolution: {integrity: sha512-NQYvTziV5HiY+fuNWHB85ZFJgKFge3iBcmcJSDI4kguxSHqDDscM1fE+tb6q4mi6RKERtw3oeGWjV5ScL1UKWQ==}
+  '@tonaljs/chord-type@4.8.0':
     dependencies:
       '@tonaljs/core': 4.10.0
       '@tonaljs/pcset': 4.8.1
-    dev: false
 
-  /@tonaljs/chord@4.10.0:
-    resolution: {integrity: sha512-PyR17WYtgk0Yi1KRPeK5dVKoCCBf+LA23pRndN9RFWUkQR/zuRgmTyXpS7JRfzNqDu4GLGVCzS37QUdHRD5FvA==}
+  '@tonaljs/chord@4.10.0':
     dependencies:
       '@tonaljs/chord-detect': 4.8.0
       '@tonaljs/chord-type': 4.8.0
@@ -4439,94 +10036,66 @@ packages:
       '@tonaljs/core': 4.10.0
       '@tonaljs/pcset': 4.8.1
       '@tonaljs/scale-type': 4.8.1
-    dev: false
 
-  /@tonaljs/collection@4.8.0:
-    resolution: {integrity: sha512-NSnqUDqnCZajYGPH4+27y6UAflX+RrAZQdP9YNBuJoTFtdSDrqV3cJoPdr2DRpGCK3Nuzw1dU8DlGsyWwNwlmg==}
-    dev: false
+  '@tonaljs/collection@4.8.0': {}
 
-  /@tonaljs/core@4.10.0:
-    resolution: {integrity: sha512-+AH7NP9iiAGil+X7NlKGlQvls/KByQmxR51d5O+y6IjHltOkVUXk74oZuxW7zF0IsKchFn8Okr0sxqFmgsQmpA==}
-    dev: false
+  '@tonaljs/core@4.10.0': {}
 
-  /@tonaljs/duration-value@4.8.0:
-    resolution: {integrity: sha512-ewWVKtYCzNkSNaFoEn6NqL5vCmHTqoN+qngoUG2Sy2ZvGCk1pwx3ckJVUkJmYrkxP4PbQASPgJi0y+0fjgVJug==}
-    dev: false
+  '@tonaljs/duration-value@4.8.0': {}
 
-  /@tonaljs/interval@4.8.0:
-    resolution: {integrity: sha512-R+1OvqRS0lFqzmzorbL0cwqZLVRnDw2kmwNtgF17A2vqcZI9aDDH/XELPLLUcZ7ykeIu4X9t/v+yTwREj+nUrA==}
+  '@tonaljs/interval@4.8.0':
     dependencies:
       '@tonaljs/core': 4.10.0
-    dev: false
 
-  /@tonaljs/key@4.9.1:
-    resolution: {integrity: sha512-WL/8raLnrcv6qpBog0HNp16/ifleeapZjU2PVTnIJ2DhuVgqtI8ccCyZHAURFdMmwYmn1Gf1VnvUAmG7RmqHJg==}
+  '@tonaljs/key@4.9.1':
     dependencies:
       '@tonaljs/core': 4.10.0
       '@tonaljs/note': 4.10.0
       '@tonaljs/roman-numeral': 4.8.0
-    dev: false
 
-  /@tonaljs/midi@4.9.0:
-    resolution: {integrity: sha512-zi6lK2OC2EA8E1Nl011erWAZgOSlrfstJMgnrbm4/nLDegotg5ALbMnfX/s+SIfSSFcXn/Og1d8xwPeAwoaUyg==}
+  '@tonaljs/midi@4.9.0':
     dependencies:
       '@tonaljs/core': 4.10.0
-    dev: false
 
-  /@tonaljs/mode@4.8.0:
-    resolution: {integrity: sha512-hyaj2RWcnA7h6+jzc074JzE8GFFYg2FaRxXJHLBIYXXlqrLnudnSHOAfHUNRySQKEMR6h4oIerf9LW6+z9sPjQ==}
+  '@tonaljs/mode@4.8.0':
     dependencies:
       '@tonaljs/collection': 4.8.0
       '@tonaljs/core': 4.10.0
       '@tonaljs/interval': 4.8.0
       '@tonaljs/pcset': 4.8.1
       '@tonaljs/scale-type': 4.8.1
-    dev: false
 
-  /@tonaljs/note@4.10.0:
-    resolution: {integrity: sha512-jWyxk9Dom+vsucj3dWG9z4j6WhZqbY7gkKsS14fHeo7g8qUZTVZFsr8ulpHyLPXN3EhLwHDU7CxIQ1klkPE33A==}
+  '@tonaljs/note@4.10.0':
     dependencies:
       '@tonaljs/core': 4.10.0
       '@tonaljs/midi': 4.9.0
-    dev: false
 
-  /@tonaljs/pcset@4.8.1:
-    resolution: {integrity: sha512-Ir+xHQHBqhSlOEeIMsPwz6A9MRdeKYajKFFwhnGLzU42HcHfe0MKyttzVO+iSIenLtiYk5TyW9ADdo6y85sJeA==}
+  '@tonaljs/pcset@4.8.1':
     dependencies:
       '@tonaljs/collection': 4.8.0
       '@tonaljs/core': 4.10.0
-    dev: false
 
-  /@tonaljs/progression@4.8.0:
-    resolution: {integrity: sha512-JS5xDox5pN3rRAIIC7ACumGmSwMpIRPvQpUePTmfQS0YMjFofzXeAjH/7WZN0328VK4vk8OAWu5N18pVxqJqQw==}
+  '@tonaljs/progression@4.8.0':
     dependencies:
       '@tonaljs/chord': 4.10.0
       '@tonaljs/core': 4.10.0
       '@tonaljs/roman-numeral': 4.8.0
-    dev: false
 
-  /@tonaljs/range@4.8.1:
-    resolution: {integrity: sha512-UAyHBPh1SfqOo2w/BA6Rji3Sl1V0z/ggoE9+gS5aig13qUaVM8B3p2eanEgrxsRTN+yARPSE83CiWWbVqLKzWA==}
+  '@tonaljs/range@4.8.1':
     dependencies:
       '@tonaljs/collection': 4.8.0
       '@tonaljs/midi': 4.9.0
-    dev: false
 
-  /@tonaljs/roman-numeral@4.8.0:
-    resolution: {integrity: sha512-jktwfGXcs4qp5A0jy5pyWxgYkeGDcaldV9tiv7XnNR5yLwDm0D6S9rRlNlSo3n0wyDo3+Kh80hd3Mps+Gsf81w==}
+  '@tonaljs/roman-numeral@4.8.0':
     dependencies:
       '@tonaljs/core': 4.10.0
-    dev: false
 
-  /@tonaljs/scale-type@4.8.1:
-    resolution: {integrity: sha512-XlSCFnEmiv7olj8mQBnQOBP9l1CtKFju3BqIILvLCacc6nrWSfSOSi8Y08FujSdvnU6i2fJmK/AYqlqFNoR1rA==}
+  '@tonaljs/scale-type@4.8.1':
     dependencies:
       '@tonaljs/core': 4.10.0
       '@tonaljs/pcset': 4.8.1
-    dev: false
 
-  /@tonaljs/scale@4.12.0:
-    resolution: {integrity: sha512-1XxGoNqOFRgHWtpGH1Ery/AObnlnHp8+Yxe2FSE7J1BzUFej1XpJJyRvR4sOFVGr603xze+9IOXVgGTADcy/IQ==}
+  '@tonaljs/scale@4.12.0':
     dependencies:
       '@tonaljs/chord-type': 4.8.0
       '@tonaljs/collection': 4.8.0
@@ -4534,14 +10103,10 @@ packages:
       '@tonaljs/note': 4.10.0
       '@tonaljs/pcset': 4.8.1
       '@tonaljs/scale-type': 4.8.1
-    dev: false
 
-  /@tonaljs/time-signature@4.8.0:
-    resolution: {integrity: sha512-ES5WoBC3aA5qQcVxh3GUc/Z1XAlnul/PCdlYrmTNAAJ4hgv4H5WHu15fWk7xRcCC6LZz6chfQNbSIXl9sNRdZQ==}
-    dev: false
+  '@tonaljs/time-signature@4.8.0': {}
 
-  /@tonaljs/tonal@4.10.0:
-    resolution: {integrity: sha512-F2T9Fiy+j0MVped89kCrX1XF68mQOLUnny4pDOHrIf+OkrjtLQOzzaSOrX1tx0o72WUwQm1knz6D1d57b9X1HA==}
+  '@tonaljs/tonal@4.10.0':
     dependencies:
       '@tonaljs/abc-notation': 4.8.0
       '@tonaljs/array': 4.8.0
@@ -4562,826 +10127,623 @@ packages:
       '@tonaljs/scale': 4.12.0
       '@tonaljs/scale-type': 4.8.1
       '@tonaljs/time-signature': 4.8.0
-    dev: false
 
-  /@tootallnate/once@2.0.0:
-    resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==}
-    engines: {node: '>= 10'}
-    dev: true
+  '@tufjs/canonical-json@2.0.0': {}
 
-  /@tufjs/canonical-json@1.0.0:
-    resolution: {integrity: sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
-    dev: true
-
-  /@tufjs/canonical-json@2.0.0:
-    resolution: {integrity: sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==}
-    engines: {node: ^16.14.0 || >=18.0.0}
-    dev: true
-
-  /@tufjs/models@1.0.3:
-    resolution: {integrity: sha512-mkFEqqRisi13DmR5pX4x+Zk97EiU8djTtpNW1GeuX410y/raAsq/T3ZCjwoRIZ8/cIBfW0olK/sywlAiWevDVw==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
-    dependencies:
-      '@tufjs/canonical-json': 1.0.0
-      minimatch: 7.4.6
-    dev: true
-
-  /@tufjs/models@2.0.0:
-    resolution: {integrity: sha512-c8nj8BaOExmZKO2DXhDfegyhSGcG9E/mPN3U13L+/PsoWm1uaGiHHjxqSHQiasDBQwDA3aHuw9+9spYAP1qvvg==}
-    engines: {node: ^16.14.0 || >=18.0.0}
+  '@tufjs/models@2.0.1':
     dependencies:
       '@tufjs/canonical-json': 2.0.0
-      minimatch: 9.0.3
-    dev: true
+      minimatch: 9.0.5
 
-  /@types/acorn@4.0.6:
-    resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==}
+  '@types/acorn@4.0.6':
     dependencies:
-      '@types/estree': 1.0.0
-    dev: false
+      '@types/estree': 1.0.6
 
-  /@types/babel__core@7.20.5:
-    resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
+  '@types/babel__core@7.20.5':
     dependencies:
-      '@babel/parser': 7.23.6
-      '@babel/types': 7.23.6
+      '@babel/parser': 7.25.8
+      '@babel/types': 7.25.8
       '@types/babel__generator': 7.6.4
       '@types/babel__template': 7.4.1
       '@types/babel__traverse': 7.18.3
 
-  /@types/babel__generator@7.6.4:
-    resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==}
+  '@types/babel__generator@7.6.4':
     dependencies:
-      '@babel/types': 7.23.6
+      '@babel/types': 7.25.8
 
-  /@types/babel__template@7.4.1:
-    resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==}
+  '@types/babel__template@7.4.1':
     dependencies:
-      '@babel/parser': 7.23.6
-      '@babel/types': 7.23.6
+      '@babel/parser': 7.25.8
+      '@babel/types': 7.25.8
 
-  /@types/babel__traverse@7.18.3:
-    resolution: {integrity: sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==}
+  '@types/babel__traverse@7.18.3':
     dependencies:
-      '@babel/types': 7.23.6
+      '@babel/types': 7.25.8
 
-  /@types/debug@4.1.7:
-    resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==}
+  '@types/cookie@0.6.0': {}
+
+  '@types/debug@4.1.7':
     dependencies:
       '@types/ms': 0.7.31
 
-  /@types/estree-jsx@1.0.0:
-    resolution: {integrity: sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==}
+  '@types/estree-jsx@1.0.5':
     dependencies:
-      '@types/estree': 1.0.0
-    dev: false
+      '@types/estree': 1.0.6
 
-  /@types/estree@0.0.39:
-    resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==}
-    dev: true
+  '@types/estree@0.0.39': {}
 
-  /@types/estree@1.0.0:
-    resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==}
+  '@types/estree@1.0.0': {}
 
-  /@types/estree@1.0.5:
-    resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
+  '@types/estree@1.0.6': {}
 
-  /@types/hast@3.0.2:
-    resolution: {integrity: sha512-B5hZHgHsXvfCoO3xgNJvBnX7N8p86TqQeGKXcokW4XXi+qY4vxxPSFYofytvVmpFxzPv7oxDQzjg5Un5m2/xiw==}
+  '@types/hast@3.0.2':
+    dependencies:
+      '@types/unist': 3.0.3
+
+  '@types/hast@3.0.4':
+    dependencies:
+      '@types/unist': 3.0.3
+
+  '@types/json-schema@7.0.15': {}
+
+  '@types/json5@0.0.29': {}
+
+  '@types/linkify-it@5.0.0': {}
+
+  '@types/markdown-it@14.1.2':
+    dependencies:
+      '@types/linkify-it': 5.0.0
+      '@types/mdurl': 2.0.0
+
+  '@types/mdast@4.0.2':
     dependencies:
       '@types/unist': 3.0.1
 
-  /@types/json5@0.0.29:
-    resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
-    dev: true
-
-  /@types/linkify-it@3.0.2:
-    resolution: {integrity: sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==}
-    dev: true
-
-  /@types/markdown-it@12.2.3:
-    resolution: {integrity: sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==}
+  '@types/mdast@4.0.4':
     dependencies:
-      '@types/linkify-it': 3.0.2
-      '@types/mdurl': 1.0.2
-    dev: true
+      '@types/unist': 3.0.3
 
-  /@types/mdast@4.0.2:
-    resolution: {integrity: sha512-tYR83EignvhYO9iU3kDg8V28M0jqyh9zzp5GV+EO+AYnyUl3P5ltkTeJuTiFZQFz670FSb3EwT/6LQdX+UdKfw==}
+  '@types/mdurl@2.0.0': {}
+
+  '@types/mdx@2.0.13': {}
+
+  '@types/minimatch@3.0.5': {}
+
+  '@types/minimist@1.2.2': {}
+
+  '@types/ms@0.7.31': {}
+
+  '@types/nlcst@1.0.4':
     dependencies:
-      '@types/unist': 3.0.1
+      '@types/unist': 2.0.11
 
-  /@types/mdurl@1.0.2:
-    resolution: {integrity: sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==}
-    dev: true
-
-  /@types/mdx@2.0.3:
-    resolution: {integrity: sha512-IgHxcT3RC8LzFLhKwP3gbMPeaK7BM9eBH46OdapPA7yvuIUJ8H6zHZV53J8hGZcTSnt95jANt+rTBNUUc22ACQ==}
-    dev: false
-
-  /@types/minimatch@3.0.5:
-    resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==}
-    dev: true
-
-  /@types/minimist@1.2.2:
-    resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==}
-    dev: true
-
-  /@types/ms@0.7.31:
-    resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==}
-
-  /@types/nlcst@1.0.0:
-    resolution: {integrity: sha512-3TGCfOcy8R8mMQ4CNSNOe3PG66HttvjcLzCoOpvXvDtfWOTi+uT/rxeOKm/qEwbM4SNe1O/PjdiBK2YcTjU4OQ==}
+  '@types/nlcst@2.0.3':
     dependencies:
-      '@types/unist': 3.0.1
+      '@types/unist': 3.0.3
 
-  /@types/node@20.10.6:
-    resolution: {integrity: sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw==}
+  '@types/node@20.16.12':
     dependencies:
-      undici-types: 5.26.5
+      undici-types: 6.19.8
 
-  /@types/normalize-package-data@2.4.1:
-    resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
-    dev: true
-
-  /@types/phoenix@1.5.4:
-    resolution: {integrity: sha512-L5eZmzw89eXBKkiqVBcJfU1QGx9y+wurRIEgt0cuLH0hwNtVUxtx+6cu0R2STwWj468sjXyBYPYDtGclUd1kjQ==}
-    dev: false
-
-  /@types/prop-types@15.7.5:
-    resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==}
-    dev: false
-
-  /@types/react-dom@18.2.18:
-    resolution: {integrity: sha512-TJxDm6OfAX2KJWJdMEVTwWke5Sc/E/RlnPGvGfS0W7+6ocy2xhDVQVh/KvC2Uf7kACs+gDytdusDSdWfWkaNzw==}
+  '@types/node@22.7.6':
     dependencies:
-      '@types/react': 18.2.46
-    dev: false
-
-  /@types/react@18.2.46:
-    resolution: {integrity: sha512-nNCvVBcZlvX4NU1nRRNV/mFl1nNRuTuslAJglQsq+8ldXe5Xv0Wd2f7WTE3jOxhLH2BFfiZGC6GCp+kHQbgG+w==}
-    dependencies:
-      '@types/prop-types': 15.7.5
-      '@types/scheduler': 0.16.2
-      csstype: 3.1.1
-    dev: false
-
-  /@types/resolve@1.17.1:
-    resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==}
-    dependencies:
-      '@types/node': 20.10.6
-    dev: true
-
-  /@types/scheduler@0.16.2:
-    resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==}
-    dev: false
-
-  /@types/trusted-types@2.0.2:
-    resolution: {integrity: sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==}
-    dev: true
-
-  /@types/ungap__structured-clone@0.3.3:
-    resolution: {integrity: sha512-RNmhIPwoip6K/zZOv3ypksTAqaqLEXvlNSXKyrC93xMSOAHZCR7PifW6xKZCwkbbnbM9dwB9X56PPoNTlNwEqw==}
-    dev: false
-
-  /@types/unist@2.0.6:
-    resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==}
-
-  /@types/unist@3.0.1:
-    resolution: {integrity: sha512-ue/hDUpPjC85m+PM9OQDMZr3LywT+CT6mPsQq8OJtCLiERkGRcQUFvu9XASF5XWqyZFXbf15lvb3JFJ4dRLWPg==}
-
-  /@types/webmidi@2.0.10:
-    resolution: {integrity: sha512-4RmTFMB6mN2h8XbJa1x3cOs9IOkXvFyHGcPUpUvWfmATuKg/J+dsFiMVgCE2EkpS+/8a8AP2tE3rQT1mLG7vEg==}
-    requiresBuild: true
-    dev: false
+      undici-types: 6.19.8
     optional: true
 
-  /@types/webmidi@2.0.6:
-    resolution: {integrity: sha512-sfS0A5IryqmBrUpcGPipEPeFdpqmZzP6b6lZFxHKgz5n2Vhzh4yJ5P2TvoDUhDjqJyv0Y25ng0Qodgo2Vu08ug==}
-    dev: false
+  '@types/normalize-package-data@2.4.1': {}
 
-  /@typescript-eslint/types@5.62.0:
-    resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    dev: true
+  '@types/phoenix@1.6.5': {}
 
-  /@typescript-eslint/typescript-estree@5.62.0(typescript@5.3.3):
-    resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    peerDependencies:
-      typescript: '*'
-    peerDependenciesMeta:
-      typescript:
-        optional: true
+  '@types/prop-types@15.7.5': {}
+
+  '@types/react-dom@18.3.1':
+    dependencies:
+      '@types/react': 18.3.11
+
+  '@types/react@18.3.11':
+    dependencies:
+      '@types/prop-types': 15.7.5
+      csstype: 3.1.1
+
+  '@types/resolve@1.17.1':
+    dependencies:
+      '@types/node': 20.16.12
+
+  '@types/trusted-types@2.0.2': {}
+
+  '@types/trusted-types@2.0.7': {}
+
+  '@types/ungap__structured-clone@0.3.3': {}
+
+  '@types/unist@2.0.11': {}
+
+  '@types/unist@3.0.1': {}
+
+  '@types/unist@3.0.3': {}
+
+  '@types/webmidi@2.1.0': {}
+
+  '@types/ws@8.5.12':
+    dependencies:
+      '@types/node': 20.16.12
+
+  '@typescript-eslint/types@5.62.0': {}
+
+  '@typescript-eslint/typescript-estree@5.62.0(typescript@5.6.3)':
     dependencies:
       '@typescript-eslint/types': 5.62.0
       '@typescript-eslint/visitor-keys': 5.62.0
-      debug: 4.3.4
+      debug: 4.3.7
       globby: 11.1.0
       is-glob: 4.0.3
-      semver: 7.5.4
-      tsutils: 3.21.0(typescript@5.3.3)
-      typescript: 5.3.3
+      semver: 7.6.3
+      tsutils: 3.21.0(typescript@5.6.3)
+    optionalDependencies:
+      typescript: 5.6.3
     transitivePeerDependencies:
       - supports-color
-    dev: true
 
-  /@typescript-eslint/visitor-keys@5.62.0:
-    resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+  '@typescript-eslint/visitor-keys@5.62.0':
     dependencies:
       '@typescript-eslint/types': 5.62.0
-      eslint-visitor-keys: 3.4.0
-    dev: true
+      eslint-visitor-keys: 3.4.3
 
-  /@uiw/codemirror-theme-abcdef@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-5gHVFyrcOC6ejQeNz7eoSXq46ODYnjFHX8VIzs5Z8oqVqOKIkquI6jL3frP2jN2wdm9EEwa1w4W1zX4nyag9Tg==}
+  '@uiw/codemirror-theme-abcdef@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-abyss@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-/I9BI9tfhGgHv0TY0x9NQAdimR+ztipS35bxY+49GnGzKTzdY8D4CvYnk7UHQ2Mu0z4LMk0t9B4uh6R0pJ2rrA==}
+  '@uiw/codemirror-theme-abyss@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-androidstudio@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-ehd7ZGFO9a6WGUi0lKH0pQ7I7bSLXo4mdeDGzgI4boyOx3PGXAmtiy6TJZuNejyPiCs4WVmb2KVBQLYM0dBbkw==}
+  '@uiw/codemirror-theme-androidstudio@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-andromeda@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-4iDbO6CQqVm+nK+3Fq0rsUmyOT8gqA05zMCWDAva/mJ+N3AzFCkygDyq87qSZw1kO3u6weThdNxqoukhyIT8Gg==}
+  '@uiw/codemirror-theme-andromeda@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-atomone@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-dtbbcLsw6boCxo77H7tJwBv1xgyxwMa5R50/ay5cuBV2MnruE6nCEn0NKgyF5dXf3RN1Hn5Z+rEZOMbkbnAqHA==}
+  '@uiw/codemirror-theme-atomone@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-aura@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-Pa/tEB7+KMmWsgeJtlKkRrqWT1/oB1Vdi9xk+9zFuzuaV8XauZPloXYaHv+K7n7XUTKOECS5Yw+BCULKtnqJNQ==}
+  '@uiw/codemirror-theme-aura@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-basic@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-xWDxch2Gkltsj5GTKmRoRga2fe+tw2a2mIIJARHWM5oyE3FfAF8J8Tgx4acaU6hlXRgQa4qPLaYA5kK43yj1hg==}
+  '@uiw/codemirror-theme-basic@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-bbedit@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-EH5fGyU3oepRLhVwPdqaShIgypPUG3FbwxB7cqH3TgGlDUIQtCK9u5MFo0br84kE+ZXIqqphlOb9d/5gawDVRw==}
+  '@uiw/codemirror-theme-bbedit@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-bespin@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-iQ5l4GaR9i43Nez3ZB94qwBUhLMfL5t95gKc+s0as20eprFpMO3XeHf4lcxcXZCqWV0OKYp+0OGmq0d9ugYQHg==}
+  '@uiw/codemirror-theme-bespin@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-copilot@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-1AhVILVqnczOEsn2vKU6GF7Ka+/hU0kPgwx0nkHrhjg5en0Bjz7YRglG/iVLr31A7CxvAR6csmdABqdjVxV5ng==}
+  '@uiw/codemirror-theme-console@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-darcula@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-Dycs92ET0SZ5G9SblpYSmQDqQvD1jHgp4Sn3r1rlonkR/gcX0T7kEaNTLKI4EDG4E7WJYizHkRkKSR7gusqTFQ==}
+  '@uiw/codemirror-theme-copilot@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-dracula@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-7NAznBZ/DgRuc8FOMmRRI7NAZv4RgARVX86b9MYxU4HcINgGrk+tnJCxOVwJbAyQQ/LjsFLzNLIK23HrjM5AtA==}
+  '@uiw/codemirror-theme-darcula@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-duotone@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-RiJDUMIR9B8/fxs5g7WqCC1Sryv845ypoeoJjTNVCtb6m6e4jX+hDZXFpvkXyy4q1nT/3KNBKYsWT/x3VIV30g==}
+  '@uiw/codemirror-theme-dracula@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-eclipse@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-Dp5j4mFPH8UOoH37b2Wc45khNGcyusCDbfRw0jeBAGW258xH4UbHBlEIY+1/z4bloIfoguCyE3nPQnsa/M59Qg==}
+  '@uiw/codemirror-theme-duotone@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-github@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-msrpNrKk/CZQHk58TshI8aH7FpEyL404m/vWlGUdL2jGW7IRKm0nXn1lXXQ/snzk65h88GO6u9fiiv0pxRuZfQ==}
+  '@uiw/codemirror-theme-eclipse@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-gruvbox-dark@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-Igebc4v8nmfdH+vjx16nbDsj3+zxvTGkYzfvdqJ19mNSXwOwRbjTvfdsMHR24/5rtiE98JGr40kfXilmuzSiTg==}
+  '@uiw/codemirror-theme-github@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-kimbie@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-dhWqIz1nsFzqoe5U3jIPeCJ9/c534YMmsGvNq3JJgRjD/KZeV8TSOJfuJNxI6jCskXh149Z5wghKE+FnNp/eUA==}
+  '@uiw/codemirror-theme-gruvbox-dark@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-material@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-Xdd2uI7kdKCD7xbgNhOjL7ksZsw8D+nw66QXAvyLUaBBGOFmObV7yJhCU7DGx9yAHO4eRMz6eRMuSolNnidgsg==}
+  '@uiw/codemirror-theme-kimbie@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-monokai-dimmed@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-+L/fJiTEgJqsukLtTOIo3x+Jk7tS1OmHrr6+6p+bA37NiTGkG1hxpOKvM0UINPFN0zyuvNHGQodW7NacvgxYWA==}
+  '@uiw/codemirror-theme-material@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-monokai@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-ztPj09vlBhkAxF6Ns1iXMFnTUlvmMGs6y0empFXffKV9QnErcCjUsvaOiqzNkmn9RiRR+mAjqN4oMimtmchP8A==}
+  '@uiw/codemirror-theme-monokai-dimmed@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-noctis-lilac@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-k2QjlufmV6aGlkafTFqtAr2IsfZ0s8KzZfeDIFqBCjpRT+DRuVFYgu/IlPVK8uPNneLe1Hzr5IAH+X8rd7LUsw==}
+  '@uiw/codemirror-theme-monokai@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-nord@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-VOTWCPbkZjxPE5FZUp/WYgKXELZ0LNnfRwBz6iPAD3u4dVXfnGzHDIzVx406R0SaJ8MO42zAoee7PQiRFRsMBw==}
+  '@uiw/codemirror-theme-noctis-lilac@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-okaidia@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-jZQ3YV+taTroqGmnAnFwU1uhAc+BZmuN1vjOJ9of7b6nmav1cohd8pdinZgDLag/ZrJt6TVr/KYBH8NF1Sm//g==}
+  '@uiw/codemirror-theme-nord@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-quietlight@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-s1QZXCpsT8+6NMMl3es1OWC6x50AaoXiEfwJdahpV37MqLUuMgYSf2/QLidgmQ0CL/ygsiO2wPbkSz004uKQtw==}
+  '@uiw/codemirror-theme-okaidia@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-red@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-IaOMm4O7pCbJ+iJe2lOq2ZzO+2tsZ5E7jSvF7t2IWyMiANswlQpcdea0yATr2xm54GyB/gNRU9D3t7jpwn8sew==}
+  '@uiw/codemirror-theme-quietlight@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-solarized@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-L+KSl9v6Lzt1Tt4A6jhGlMuDL09Iwnjyn05i17JhsuofSMcH5RVeb7YPO1iqBBRh9uLMVzvjL8vbItXjS9DeSg==}
+  '@uiw/codemirror-theme-red@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-sublime@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-wqr+1NFM1VjfCglB/AhgwJXmRCwo8/1rrdkIzhOTrD2AXqmOyppt9hAtvN2h+OA2OBkhqH90dco1aNJUQKcTuw==}
+  '@uiw/codemirror-theme-solarized@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-tokyo-night-day@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-2HknKZdadg2wZ93rC0SrhR4Z4AJiKI/HGLQDF5XheMoxXeX/7bta/6Dblw3zGJmfoESNtRGBU3pHGiAgT6MjNw==}
+  '@uiw/codemirror-theme-sublime@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-tokyo-night-storm@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-LJK/bR/jTt2PEJthnHu3feDwh+NYrCKE8SL4sp4iKZ12WRJh5/jmLY1EiPtPf9tWpK2SGhr9aJ3yLS5nQ0vrrw==}
+  '@uiw/codemirror-theme-tokyo-night-day@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-tokyo-night@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-zkQct/hRZdmcyjtwQvsqz9VsUB4V/MmlkSTbYhBsP4ZZKhkxYOdr0nDhNMXPbo8h6nWxvkUvre0NjM1GcMwBtg==}
+  '@uiw/codemirror-theme-tokyo-night-storm@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-tomorrow-night-blue@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-Ubg/3/+ED8uNC6RR3hCri23Re0BFYjagZbqy1/YT1p1Bx/4BooDlv4hbxw7nORnXxfQtnPq9gGc1ZJFFQXF1ww==}
+  '@uiw/codemirror-theme-tokyo-night@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-vscode@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-NUD2l/PqnvzNtxscXk99hm5a5avFsE4lxG2MUtPRuOZRRNXHxNsYeXGlab6R5hUO+v/Lxy6mrMmTRyL0Gj6dIw==}
+  '@uiw/codemirror-theme-tomorrow-night-blue@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-white@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-nX4iuiZXPkR0WaNelaLpx6JAcPQ1TPoMoeYEDV8XSbMvlBZgHAgFwi2KSIexwSG5Fihywpv+mkusAPrOHNF3zw==}
+  '@uiw/codemirror-theme-vscode@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-theme-xcode@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-nmzqZ0v5GNWzAQSh0vgAN6XZ+OXeJpHn73fNfMiWzo4ZHzO1ZB5DAFRs8TJYdl6IXkp1RAcxIZ6OdmZ8tXF1CA==}
+  '@uiw/codemirror-theme-white@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-themes-all@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-rwJB/pNBLutpQ2hPWV50FoaFv7eh8GEyK+2NIPY3SKiNAiJLWtXp3yN73Re3jY0XxOdTyi9jPnvCXJLGrxrxXw==}
+  '@uiw/codemirror-theme-xcode@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@uiw/codemirror-theme-abcdef': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-abyss': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-androidstudio': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-andromeda': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-atomone': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-aura': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-basic': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-bbedit': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-bespin': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-copilot': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-darcula': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-dracula': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-duotone': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-eclipse': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-github': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-gruvbox-dark': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-kimbie': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-material': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-monokai': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-monokai-dimmed': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-noctis-lilac': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-nord': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-okaidia': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-quietlight': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-red': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-solarized': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-sublime': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-tokyo-night': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-tokyo-night-day': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-tokyo-night-storm': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-tomorrow-night-blue': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-vscode': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-white': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-theme-xcode': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
-      '@uiw/codemirror-themes': 4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
     transitivePeerDependencies:
       - '@codemirror/language'
       - '@codemirror/state'
       - '@codemirror/view'
-    dev: false
 
-  /@uiw/codemirror-themes@4.21.21(@codemirror/language@6.10.0)(@codemirror/state@6.4.0)(@codemirror/view@6.23.0):
-    resolution: {integrity: sha512-ljVcMGdaxo75UaH+EqxJ+jLyMVVgeSfW2AKyT1VeLy+4SDpuqNQ7wq5XVxktsG6LH+OvgSFndWXgPANf4+gQcA==}
-    peerDependencies:
-      '@codemirror/language': '>=6.0.0'
-      '@codemirror/state': '>=6.0.0'
-      '@codemirror/view': '>=6.0.0'
+  '@uiw/codemirror-themes-all@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      '@codemirror/language': 6.10.0
-      '@codemirror/state': 6.4.0
-      '@codemirror/view': 6.23.0
-    dev: false
+      '@uiw/codemirror-theme-abcdef': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-abyss': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-androidstudio': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-andromeda': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-atomone': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-aura': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-basic': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-bbedit': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-bespin': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-console': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-copilot': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-darcula': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-dracula': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-duotone': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-eclipse': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-github': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-gruvbox-dark': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-kimbie': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-material': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-monokai': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-monokai-dimmed': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-noctis-lilac': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-nord': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-okaidia': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-quietlight': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-red': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-solarized': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-sublime': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-tokyo-night': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-tokyo-night-day': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-tokyo-night-storm': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-tomorrow-night-blue': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-vscode': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-white': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-theme-xcode': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+      '@uiw/codemirror-themes': 4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)
+    transitivePeerDependencies:
+      - '@codemirror/language'
+      - '@codemirror/state'
+      - '@codemirror/view'
 
-  /@ungap/structured-clone@1.2.0:
-    resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
-
-  /@vite-pwa/astro@0.2.0(astro@4.0.8)(vite-plugin-pwa@0.17.4):
-    resolution: {integrity: sha512-1MBNbRo9I9fp9sUSoaQfI/xHVDRKRoUsWETDJMVoKoctZYfm4fZgb7EN76WJdejW/vup+3+uoFlDMCnca+vZzA==}
-    peerDependencies:
-      astro: ^1.6.0 || ^2.0.0 || ^3.0.0 || ^4.0.0
-      vite-plugin-pwa: '>=0.17.3 <1'
+  '@uiw/codemirror-themes@4.23.5(@codemirror/language@6.10.3)(@codemirror/state@6.4.1)(@codemirror/view@6.34.1)':
     dependencies:
-      astro: 4.0.8(@types/node@20.10.6)(typescript@5.3.3)
-      vite-plugin-pwa: 0.17.4(vite@5.2.2)(workbox-build@7.0.0)(workbox-window@7.0.0)
-    dev: true
+      '@codemirror/language': 6.10.3
+      '@codemirror/state': 6.4.1
+      '@codemirror/view': 6.34.1
 
-  /@vitejs/plugin-react@4.2.1(vite@5.2.2):
-    resolution: {integrity: sha512-oojO9IDc4nCUUi8qIR11KoQm0XFFLIwsRBwHRR4d/88IWghn1y6ckz/bJ8GHDCsYEJee8mDzqtJxh15/cisJNQ==}
-    engines: {node: ^14.18.0 || >=16.0.0}
-    peerDependencies:
-      vite: ^4.2.0 || ^5.0.0
+  '@ungap/structured-clone@1.2.0': {}
+
+  '@vite-pwa/astro@0.2.0(astro@4.16.6(@types/node@20.16.12)(rollup@2.79.2)(terser@5.36.0)(typescript@5.6.3))(vite-plugin-pwa@0.17.5(vite@5.4.9(@types/node@20.16.12)(terser@5.36.0))(workbox-build@7.0.0(@types/babel__core@7.20.5))(workbox-window@7.1.0))':
     dependencies:
-      '@babel/core': 7.23.7
-      '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.23.7)
-      '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.7)
+      astro: 4.16.6(@types/node@20.16.12)(rollup@2.79.2)(terser@5.36.0)(typescript@5.6.3)
+      vite-plugin-pwa: 0.17.5(vite@5.4.9(@types/node@20.16.12)(terser@5.36.0))(workbox-build@7.0.0(@types/babel__core@7.20.5))(workbox-window@7.1.0)
+
+  '@vitejs/plugin-react@4.3.2(vite@5.4.9(@types/node@20.16.12)(terser@5.36.0))':
+    dependencies:
+      '@babel/core': 7.25.8
+      '@babel/plugin-transform-react-jsx-self': 7.25.7(@babel/core@7.25.8)
+      '@babel/plugin-transform-react-jsx-source': 7.25.7(@babel/core@7.25.8)
       '@types/babel__core': 7.20.5
-      react-refresh: 0.14.0
-      vite: 5.2.2(@types/node@20.10.6)
+      react-refresh: 0.14.2
+      vite: 5.4.9(@types/node@20.16.12)(terser@5.36.0)
     transitivePeerDependencies:
       - supports-color
-    dev: false
 
-  /@vitest/expect@1.1.0:
-    resolution: {integrity: sha512-9IE2WWkcJo2BR9eqtY5MIo3TPmS50Pnwpm66A6neb2hvk/QSLfPXBz2qdiwUOQkwyFuuXEUj5380CbwfzW4+/w==}
+  '@vitest/expect@2.1.3':
     dependencies:
-      '@vitest/spy': 1.1.0
-      '@vitest/utils': 1.1.0
-      chai: 4.3.10
-    dev: true
+      '@vitest/spy': 2.1.3
+      '@vitest/utils': 2.1.3
+      chai: 5.1.1
+      tinyrainbow: 1.2.0
 
-  /@vitest/runner@1.1.0:
-    resolution: {integrity: sha512-zdNLJ00pm5z/uhbWF6aeIJCGMSyTyWImy3Fcp9piRGvueERFlQFbUwCpzVce79OLm2UHk9iwaMSOaU9jVHgNVw==}
+  '@vitest/mocker@2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@22.7.6)(terser@5.36.0))':
     dependencies:
-      '@vitest/utils': 1.1.0
-      p-limit: 5.0.0
-      pathe: 1.1.1
-    dev: true
+      '@vitest/spy': 2.1.3
+      estree-walker: 3.0.3
+      magic-string: 0.30.12
+    optionalDependencies:
+      vite: 5.4.9(@types/node@22.7.6)(terser@5.36.0)
 
-  /@vitest/snapshot@1.1.0:
-    resolution: {integrity: sha512-5O/wyZg09V5qmNmAlUgCBqflvn2ylgsWJRRuPrnHEfDNT6tQpQ8O1isNGgo+VxofISHqz961SG3iVvt3SPK/QQ==}
+  '@vitest/pretty-format@2.1.3':
     dependencies:
-      magic-string: 0.30.5
-      pathe: 1.1.1
-      pretty-format: 29.7.0
-    dev: true
+      tinyrainbow: 1.2.0
 
-  /@vitest/spy@1.1.0:
-    resolution: {integrity: sha512-sNOVSU/GE+7+P76qYo+VXdXhXffzWZcYIPQfmkiRxaNCSPiLANvQx5Mx6ZURJ/ndtEkUJEpvKLXqAYTKEY+lTg==}
+  '@vitest/runner@2.1.3':
     dependencies:
-      tinyspy: 2.2.0
-    dev: true
+      '@vitest/utils': 2.1.3
+      pathe: 1.1.2
 
-  /@vitest/ui@1.1.0(vitest@1.1.0):
-    resolution: {integrity: sha512-7yU1QRFBplz0xJqcgt+agcbrNFdBmLo8UUppdKkFmYx+Ih0+yMYQOyr7kOB+YoggJY/p5ZzXxdbiOz7NBX2y+w==}
-    peerDependencies:
-      vitest: ^1.0.0
+  '@vitest/snapshot@2.1.3':
     dependencies:
-      '@vitest/utils': 1.1.0
-      fast-glob: 3.3.2
-      fflate: 0.8.1
-      flatted: 3.2.9
-      pathe: 1.1.1
-      picocolors: 1.0.0
+      '@vitest/pretty-format': 2.1.3
+      magic-string: 0.30.12
+      pathe: 1.1.2
+
+  '@vitest/spy@2.1.3':
+    dependencies:
+      tinyspy: 3.0.2
+
+  '@vitest/ui@2.1.3(vitest@2.1.3)':
+    dependencies:
+      '@vitest/utils': 2.1.3
+      fflate: 0.8.2
+      flatted: 3.3.1
+      pathe: 1.1.2
       sirv: 2.0.4
-      vitest: 1.1.0(@vitest/ui@1.1.0)
-    dev: true
+      tinyglobby: 0.2.9
+      tinyrainbow: 1.2.0
+      vitest: 2.1.3(@types/node@22.7.6)(@vitest/ui@2.1.3)(terser@5.36.0)
 
-  /@vitest/utils@1.1.0:
-    resolution: {integrity: sha512-z+s510fKmYz4Y41XhNs3vcuFTFhcij2YF7F8VQfMEYAAUfqQh0Zfg7+w9xdgFGhPf3tX3TicAe+8BDITk6ampQ==}
+  '@vitest/utils@2.1.3':
     dependencies:
-      diff-sequences: 29.6.3
-      loupe: 2.3.7
-      pretty-format: 29.7.0
-    dev: true
+      '@vitest/pretty-format': 2.1.3
+      loupe: 3.1.2
+      tinyrainbow: 1.2.0
 
-  /@yarnpkg/lockfile@1.1.0:
-    resolution: {integrity: sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==}
-    dev: true
+  '@yarnpkg/lockfile@1.1.0': {}
 
-  /@yarnpkg/parsers@3.0.0-rc.46:
-    resolution: {integrity: sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==}
-    engines: {node: '>=14.15.0'}
+  '@yarnpkg/parsers@3.0.0-rc.46':
     dependencies:
       js-yaml: 3.14.1
-      tslib: 2.5.0
-    dev: true
+      tslib: 2.8.0
 
-  /@zkochan/js-yaml@0.0.6:
-    resolution: {integrity: sha512-nzvgl3VfhcELQ8LyVrYOru+UtAy1nrygk2+AGbTm8a5YcO6o8lSjAT+pfg3vJWxIoZKOUhrK6UU7xW/+00kQrg==}
-    hasBin: true
+  '@zkochan/js-yaml@0.0.6':
     dependencies:
       argparse: 2.0.1
-    dev: true
 
-  /JSONStream@1.3.5:
-    resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
-    hasBin: true
+  JSONStream@1.3.5:
     dependencies:
       jsonparse: 1.3.1
       through: 2.3.8
-    dev: true
 
-  /abbrev@2.0.0:
-    resolution: {integrity: sha512-6/mh1E2u2YgEsCHdY0Yx5oW+61gZU+1vXaoiHHrpKeuRNNgFvS+/jrwHiQhB5apAf5oB7UB7E19ol2R2LKH8hQ==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
-    dev: true
+  abbrev@2.0.0: {}
 
-  /acorn-jsx@5.3.2(acorn@8.11.3):
-    resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
-    peerDependencies:
-      acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+  acorn-jsx@5.3.2(acorn@8.13.0):
     dependencies:
-      acorn: 8.11.3
+      acorn: 8.13.0
 
-  /acorn-walk@8.3.1:
-    resolution: {integrity: sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==}
-    engines: {node: '>=0.4.0'}
-    dev: true
+  acorn@8.13.0: {}
 
-  /acorn@8.11.3:
-    resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==}
-    engines: {node: '>=0.4.0'}
-    hasBin: true
+  add-stream@1.0.0: {}
 
-  /add-stream@1.0.0:
-    resolution: {integrity: sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==}
-    dev: true
-
-  /agent-base@6.0.2:
-    resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==}
-    engines: {node: '>= 6.0.0'}
+  agent-base@6.0.2:
     dependencies:
-      debug: 4.3.4
+      debug: 4.3.7
     transitivePeerDependencies:
       - supports-color
-    dev: true
 
-  /agent-base@7.1.0:
-    resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==}
-    engines: {node: '>= 14'}
+  agent-base@7.1.1:
     dependencies:
-      debug: 4.3.4
+      debug: 4.3.7
     transitivePeerDependencies:
       - supports-color
-    dev: true
 
-  /agentkeepalive@4.2.1:
-    resolution: {integrity: sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==}
-    engines: {node: '>= 8.0.0'}
-    dependencies:
-      debug: 4.3.4
-      depd: 1.1.2
-      humanize-ms: 1.2.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  /aggregate-error@3.1.0:
-    resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==}
-    engines: {node: '>=8'}
+  aggregate-error@3.1.0:
     dependencies:
       clean-stack: 2.2.0
       indent-string: 4.0.0
-    dev: true
 
-  /ajv@6.12.6:
-    resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+  ajv@6.12.6:
     dependencies:
       fast-deep-equal: 3.1.3
       fast-json-stable-stringify: 2.1.0
       json-schema-traverse: 0.4.1
       uri-js: 4.4.1
 
-  /ajv@8.12.0:
-    resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==}
+  ajv@8.17.1:
     dependencies:
       fast-deep-equal: 3.1.3
+      fast-uri: 3.0.3
       json-schema-traverse: 1.0.0
       require-from-string: 2.0.2
-      uri-js: 4.4.1
-    dev: true
 
-  /algoliasearch@4.22.0:
-    resolution: {integrity: sha512-gfceltjkwh7PxXwtkS8KVvdfK+TSNQAWUeNSxf4dA29qW5tf2EGwa8jkJujlT9jLm17cixMVoGNc+GJFO1Mxhg==}
+  algoliasearch@4.22.0:
     dependencies:
       '@algolia/cache-browser-local-storage': 4.22.0
       '@algolia/cache-common': 4.22.0
@@ -5397,208 +10759,127 @@ packages:
       '@algolia/requester-common': 4.22.0
       '@algolia/requester-node-http': 4.22.0
       '@algolia/transporter': 4.22.0
-    dev: false
 
-  /ansi-align@3.0.1:
-    resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==}
+  ansi-align@3.0.1:
     dependencies:
       string-width: 4.2.3
 
-  /ansi-colors@4.1.3:
-    resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
-    engines: {node: '>=6'}
-    dev: true
+  ansi-colors@4.1.3: {}
 
-  /ansi-escape-sequences@4.1.0:
-    resolution: {integrity: sha512-dzW9kHxH011uBsidTXd14JXgzye/YLb2LzeKZ4bsgl/Knwx8AtbSFkkGxagdNOoh0DlqHCmfiEjWKBaqjOanVw==}
-    engines: {node: '>=8.0.0'}
+  ansi-escape-sequences@4.1.0:
     dependencies:
       array-back: 3.1.0
-    dev: true
 
-  /ansi-escapes@4.3.2:
-    resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
-    engines: {node: '>=8'}
+  ansi-escapes@4.3.2:
     dependencies:
       type-fest: 0.21.3
-    dev: true
 
-  /ansi-regex@3.0.1:
-    resolution: {integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==}
-    engines: {node: '>=4'}
-    dev: false
+  ansi-regex@3.0.1: {}
 
-  /ansi-regex@5.0.1:
-    resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
-    engines: {node: '>=8'}
+  ansi-regex@5.0.1: {}
 
-  /ansi-regex@6.0.1:
-    resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
-    engines: {node: '>=12'}
+  ansi-regex@6.1.0: {}
 
-  /ansi-styles@3.2.1:
-    resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
-    engines: {node: '>=4'}
+  ansi-styles@3.2.1:
     dependencies:
       color-convert: 1.9.3
 
-  /ansi-styles@4.3.0:
-    resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
-    engines: {node: '>=8'}
+  ansi-styles@4.3.0:
     dependencies:
       color-convert: 2.0.1
 
-  /ansi-styles@5.2.0:
-    resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
-    engines: {node: '>=10'}
-    dev: true
+  ansi-styles@5.2.0: {}
 
-  /ansi-styles@6.2.1:
-    resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
-    engines: {node: '>=12'}
+  ansi-styles@6.2.1: {}
 
-  /any-promise@1.3.0:
-    resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
-    dev: false
+  any-promise@1.3.0: {}
 
-  /anymatch@3.1.3:
-    resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
-    engines: {node: '>= 8'}
+  anymatch@3.1.3:
     dependencies:
       normalize-path: 3.0.0
       picomatch: 2.3.1
 
-  /app-module-path@2.2.0:
-    resolution: {integrity: sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==}
-    dev: true
+  app-module-path@2.2.0: {}
 
-  /aproba@2.0.0:
-    resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==}
-    dev: true
+  aproba@2.0.0: {}
 
-  /are-we-there-yet@3.0.1:
-    resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==}
-    engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
-    dependencies:
-      delegates: 1.0.0
-      readable-stream: 3.6.0
-    dev: true
+  arg@5.0.2: {}
 
-  /arg@5.0.2:
-    resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
-    dev: false
-
-  /argparse@1.0.10:
-    resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
+  argparse@1.0.10:
     dependencies:
       sprintf-js: 1.0.3
 
-  /argparse@2.0.1:
-    resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+  argparse@2.0.1: {}
 
-  /array-back@1.0.4:
-    resolution: {integrity: sha512-1WxbZvrmyhkNoeYcizokbmh5oiOCIfyvGtcqbK3Ls1v1fKcquzxnQSceOx6tzq7jmai2kFLWIpGND2cLhH6TPw==}
-    engines: {node: '>=0.12.0'}
+  aria-query@5.3.2: {}
+
+  array-back@1.0.4:
     dependencies:
       typical: 2.6.1
-    dev: true
 
-  /array-back@2.0.0:
-    resolution: {integrity: sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==}
-    engines: {node: '>=4'}
+  array-back@2.0.0:
     dependencies:
       typical: 2.6.1
-    dev: true
 
-  /array-back@3.1.0:
-    resolution: {integrity: sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==}
-    engines: {node: '>=6'}
-    dev: true
+  array-back@3.1.0: {}
 
-  /array-back@4.0.2:
-    resolution: {integrity: sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==}
-    engines: {node: '>=8'}
-    dev: true
+  array-back@4.0.2: {}
 
-  /array-back@5.0.0:
-    resolution: {integrity: sha512-kgVWwJReZWmVuWOQKEOohXKJX+nD02JAZ54D1RRWlv8L0NebauKAaFxACKzB74RTclt1+WNz5KHaLRDAPZbDEw==}
-    engines: {node: '>=10'}
-    dev: true
+  array-back@5.0.0: {}
 
-  /array-back@6.2.2:
-    resolution: {integrity: sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==}
-    engines: {node: '>=12.17'}
-    dev: true
+  array-back@6.2.2: {}
 
-  /array-buffer-byte-length@1.0.0:
-    resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==}
+  array-buffer-byte-length@1.0.0:
     dependencies:
       call-bind: 1.0.5
       is-array-buffer: 3.0.2
-    dev: true
 
-  /array-differ@3.0.0:
-    resolution: {integrity: sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==}
-    engines: {node: '>=8'}
-    dev: true
-
-  /array-ify@1.0.0:
-    resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==}
-    dev: true
-
-  /array-includes@3.1.7:
-    resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==}
-    engines: {node: '>= 0.4'}
+  array-buffer-byte-length@1.0.1:
     dependencies:
-      call-bind: 1.0.2
+      call-bind: 1.0.7
+      is-array-buffer: 3.0.4
+
+  array-differ@3.0.0: {}
+
+  array-ify@1.0.0: {}
+
+  array-includes@3.1.8:
+    dependencies:
+      call-bind: 1.0.7
       define-properties: 1.2.1
-      es-abstract: 1.22.3
-      get-intrinsic: 1.2.2
+      es-abstract: 1.23.3
+      es-object-atoms: 1.0.0
+      get-intrinsic: 1.2.4
       is-string: 1.0.7
-    dev: true
 
-  /array-iterate@2.0.1:
-    resolution: {integrity: sha512-I1jXZMjAgCMmxT4qxXfPXa6SthSoE8h6gkSI9BGGNv8mP8G/v0blc+qFnZu6K42vTOiuME596QaLO0TP3Lk0xg==}
+  array-iterate@2.0.1: {}
 
-  /array-union@2.1.0:
-    resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
-    engines: {node: '>=8'}
-    dev: true
+  array-union@2.1.0: {}
 
-  /array.prototype.findlastindex@1.2.3:
-    resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==}
-    engines: {node: '>= 0.4'}
+  array.prototype.findlastindex@1.2.5:
+    dependencies:
+      call-bind: 1.0.7
+      define-properties: 1.2.1
+      es-abstract: 1.23.3
+      es-errors: 1.3.0
+      es-object-atoms: 1.0.0
+      es-shim-unscopables: 1.0.2
+
+  array.prototype.flat@1.3.2:
     dependencies:
       call-bind: 1.0.2
       define-properties: 1.2.1
       es-abstract: 1.22.3
       es-shim-unscopables: 1.0.0
-      get-intrinsic: 1.2.2
-    dev: true
 
-  /array.prototype.flat@1.3.2:
-    resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==}
-    engines: {node: '>= 0.4'}
+  array.prototype.flatmap@1.3.2:
     dependencies:
       call-bind: 1.0.2
       define-properties: 1.2.1
       es-abstract: 1.22.3
       es-shim-unscopables: 1.0.0
-    dev: true
 
-  /array.prototype.flatmap@1.3.2:
-    resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==}
-    engines: {node: '>= 0.4'}
-    dependencies:
-      call-bind: 1.0.2
-      define-properties: 1.2.1
-      es-abstract: 1.22.3
-      es-shim-unscopables: 1.0.0
-    dev: true
-
-  /arraybuffer.prototype.slice@1.0.2:
-    resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==}
-    engines: {node: '>= 0.4'}
+  arraybuffer.prototype.slice@1.0.2:
     dependencies:
       array-buffer-byte-length: 1.0.0
       call-bind: 1.0.5
@@ -5607,525 +10888,361 @@ packages:
       get-intrinsic: 1.2.2
       is-array-buffer: 3.0.2
       is-shared-array-buffer: 1.0.2
-    dev: true
 
-  /arrify@1.0.1:
-    resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==}
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  /arrify@2.0.1:
-    resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==}
-    engines: {node: '>=8'}
-    dev: true
-
-  /assertion-error@1.1.0:
-    resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
-    dev: true
-
-  /ast-module-types@5.0.0:
-    resolution: {integrity: sha512-JvqziE0Wc0rXQfma0HZC/aY7URXHFuZV84fJRtP8u+lhp0JYCNd5wJzVXP45t0PH0Mej3ynlzvdyITYIu0G4LQ==}
-    engines: {node: '>=14'}
-    dev: true
-
-  /astring@1.8.4:
-    resolution: {integrity: sha512-97a+l2LBU3Op3bBQEff79i/E4jMD2ZLFD8rHx9B6mXyB2uQwhJQYfiDqUwtfjF4QA1F2qs//N6Cw8LetMbQjcw==}
-    hasBin: true
-    dev: false
-
-  /astro@4.0.8(@types/node@20.10.6)(typescript@5.3.3):
-    resolution: {integrity: sha512-LwbYUfdrfys5mtI6cA5V8UvPRUVVTRQ68uF1ylrEge6BkPcHHJ7qCYLNdjnNPxZDR9bWi1awILJESB6j+w0P4w==}
-    engines: {node: '>=18.14.1', npm: '>=6.14.0'}
-    hasBin: true
+  arraybuffer.prototype.slice@1.0.3:
     dependencies:
-      '@astrojs/compiler': 2.3.4
-      '@astrojs/internal-helpers': 0.2.1
-      '@astrojs/markdown-remark': 4.0.1
-      '@astrojs/telemetry': 3.0.4
-      '@babel/core': 7.23.7
-      '@babel/generator': 7.23.6
-      '@babel/parser': 7.23.6
-      '@babel/plugin-transform-react-jsx': 7.22.15(@babel/core@7.23.7)
-      '@babel/traverse': 7.23.7
-      '@babel/types': 7.23.6
+      array-buffer-byte-length: 1.0.1
+      call-bind: 1.0.7
+      define-properties: 1.2.1
+      es-abstract: 1.23.3
+      es-errors: 1.3.0
+      get-intrinsic: 1.2.4
+      is-array-buffer: 3.0.4
+      is-shared-array-buffer: 1.0.3
+
+  arrify@1.0.1: {}
+
+  arrify@2.0.1: {}
+
+  assertion-error@2.0.1: {}
+
+  ast-module-types@5.0.0: {}
+
+  astring@1.9.0: {}
+
+  astro@4.16.6(@types/node@20.16.12)(rollup@2.79.2)(terser@5.36.0)(typescript@5.6.3):
+    dependencies:
+      '@astrojs/compiler': 2.10.3
+      '@astrojs/internal-helpers': 0.4.1
+      '@astrojs/markdown-remark': 5.3.0
+      '@astrojs/telemetry': 3.1.0
+      '@babel/core': 7.25.8
+      '@babel/plugin-transform-react-jsx': 7.25.7(@babel/core@7.25.8)
+      '@babel/types': 7.25.8
+      '@oslojs/encoding': 1.1.0
+      '@rollup/pluginutils': 5.1.2(rollup@2.79.2)
       '@types/babel__core': 7.20.5
-      acorn: 8.11.3
-      boxen: 7.1.1
-      chokidar: 3.5.3
+      '@types/cookie': 0.6.0
+      acorn: 8.13.0
+      aria-query: 5.3.2
+      axobject-query: 4.1.0
+      boxen: 8.0.1
       ci-info: 4.0.0
-      clsx: 2.0.0
+      clsx: 2.1.1
       common-ancestor-path: 1.0.1
-      cookie: 0.6.0
-      debug: 4.3.4
+      cookie: 0.7.2
+      cssesc: 3.0.0
+      debug: 4.3.7
       deterministic-object-hash: 2.0.2
-      devalue: 4.3.2
-      diff: 5.1.0
+      devalue: 5.1.1
+      diff: 5.2.0
       dlv: 1.1.3
-      dset: 3.1.3
-      es-module-lexer: 1.4.1
-      esbuild: 0.19.11
+      dset: 3.1.4
+      es-module-lexer: 1.5.4
+      esbuild: 0.21.5
       estree-walker: 3.0.3
-      execa: 8.0.1
       fast-glob: 3.3.2
-      flattie: 1.1.0
+      flattie: 1.1.1
       github-slugger: 2.0.0
       gray-matter: 4.0.3
       html-escaper: 3.0.3
       http-cache-semantics: 4.1.1
       js-yaml: 4.1.0
       kleur: 4.1.5
-      magic-string: 0.30.5
-      mdast-util-to-hast: 13.0.2
-      mime: 3.0.0
-      ora: 7.0.1
-      p-limit: 5.0.0
+      magic-string: 0.30.12
+      magicast: 0.3.5
+      micromatch: 4.0.8
+      mrmime: 2.0.0
+      neotraverse: 0.6.18
+      ora: 8.1.0
+      p-limit: 6.1.0
       p-queue: 8.0.1
-      path-to-regexp: 6.2.1
-      preferred-pm: 3.1.2
-      probe-image-size: 7.2.3
+      preferred-pm: 4.0.0
       prompts: 2.4.2
-      rehype: 13.0.1
-      resolve: 1.22.8
-      semver: 7.5.4
-      server-destroy: 1.0.1
-      shikiji: 0.6.13
-      string-width: 7.0.0
-      strip-ansi: 7.1.0
-      tsconfck: 3.0.0(typescript@5.3.3)
+      rehype: 13.0.2
+      semver: 7.6.3
+      shiki: 1.22.0
+      tinyexec: 0.3.1
+      tsconfck: 3.1.4(typescript@5.6.3)
       unist-util-visit: 5.0.0
-      vfile: 6.0.1
-      vite: 5.2.2(@types/node@20.10.6)
-      vitefu: 0.2.5(vite@5.2.2)
-      which-pm: 2.1.1
+      vfile: 6.0.3
+      vite: 5.4.9(@types/node@20.16.12)(terser@5.36.0)
+      vitefu: 1.0.3(vite@5.4.9(@types/node@20.16.12)(terser@5.36.0))
+      which-pm: 3.0.0
+      xxhash-wasm: 1.0.2
       yargs-parser: 21.1.1
-      zod: 3.22.4
+      zod: 3.23.8
+      zod-to-json-schema: 3.23.3(zod@3.23.8)
+      zod-to-ts: 1.2.0(typescript@5.6.3)(zod@3.23.8)
     optionalDependencies:
-      sharp: 0.33.1
+      sharp: 0.33.5
     transitivePeerDependencies:
       - '@types/node'
       - less
       - lightningcss
+      - rollup
       - sass
+      - sass-embedded
       - stylus
       - sugarss
       - supports-color
       - terser
       - typescript
 
-  /async@3.2.4:
-    resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==}
-    dev: true
+  async@3.2.4: {}
 
-  /async@3.2.5:
-    resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==}
-    dev: true
+  async@3.2.6: {}
 
-  /asynckit@0.4.0:
-    resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
-    dev: true
+  asynckit@0.4.0: {}
 
-  /at-least-node@1.0.0:
-    resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==}
-    engines: {node: '>= 4.0.0'}
-    dev: true
+  at-least-node@1.0.0: {}
 
-  /automation-events@5.0.0:
-    resolution: {integrity: sha512-SkYa2YBwgRUJNsR5v6GxeJwP5IGnYtOMW37coplTOWMUpDYYrk5j8gGOhYa765rchRln/HssFzMAck/2P6zTFw==}
-    engines: {node: '>=14.15.4'}
+  automation-events@5.0.0:
     dependencies:
-      '@babel/runtime': 7.20.13
-      tslib: 2.5.0
-    dev: false
+      '@babel/runtime': 7.25.7
+      tslib: 2.8.0
 
-  /autoprefixer@10.4.16(postcss@8.4.32):
-    resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==}
-    engines: {node: ^10 || ^12 || >=14}
-    hasBin: true
-    peerDependencies:
-      postcss: ^8.1.0
+  autoprefixer@10.4.20(postcss@8.4.47):
     dependencies:
-      browserslist: 4.22.1
-      caniuse-lite: 1.0.30001559
+      browserslist: 4.24.0
+      caniuse-lite: 1.0.30001669
       fraction.js: 4.3.7
       normalize-range: 0.1.2
-      picocolors: 1.0.0
-      postcss: 8.4.32
+      picocolors: 1.1.1
+      postcss: 8.4.47
       postcss-value-parser: 4.2.0
-    dev: false
 
-  /available-typed-arrays@1.0.5:
-    resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==}
-    engines: {node: '>= 0.4'}
-    dev: true
+  available-typed-arrays@1.0.5: {}
 
-  /axios@1.6.3:
-    resolution: {integrity: sha512-fWyNdeawGam70jXSVlKl+SUNVcL6j6W79CuSIPfi6HnDUmSCH6gyUys/HrqHeA/wU0Az41rRgean494d0Jb+ww==}
+  available-typed-arrays@1.0.7:
+    dependencies:
+      possible-typed-array-names: 1.0.0
+
+  axios@1.6.3:
     dependencies:
       follow-redirects: 1.15.2
       form-data: 4.0.0
       proxy-from-env: 1.1.0
     transitivePeerDependencies:
       - debug
-    dev: true
 
-  /babel-plugin-add-module-exports@0.2.1:
-    resolution: {integrity: sha512-3AN/9V/rKuv90NG65m4tTHsI04XrCKsWbztIcW7a8H5iIN7WlvWucRtVV0V/rT4QvtA11n5Vmp20fLwfMWqp6g==}
-    dev: false
+  axobject-query@4.1.0: {}
 
-  /babel-plugin-polyfill-corejs2@0.4.7(@babel/core@7.23.7):
-    resolution: {integrity: sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==}
-    peerDependencies:
-      '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+  babel-plugin-add-module-exports@0.2.1: {}
+
+  babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.25.8):
     dependencies:
-      '@babel/compat-data': 7.23.5
-      '@babel/core': 7.23.7
-      '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.7)
+      '@babel/compat-data': 7.25.8
+      '@babel/core': 7.25.8
+      '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.8)
       semver: 6.3.1
     transitivePeerDependencies:
       - supports-color
-    dev: true
 
-  /babel-plugin-polyfill-corejs3@0.8.7(@babel/core@7.23.7):
-    resolution: {integrity: sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==}
-    peerDependencies:
-      '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+  babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.25.8):
     dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.7)
-      core-js-compat: 3.35.0
+      '@babel/core': 7.25.8
+      '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.8)
+      core-js-compat: 3.38.1
     transitivePeerDependencies:
       - supports-color
-    dev: true
 
-  /babel-plugin-polyfill-regenerator@0.5.4(@babel/core@7.23.7):
-    resolution: {integrity: sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==}
-    peerDependencies:
-      '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+  babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.25.8):
     dependencies:
-      '@babel/core': 7.23.7
-      '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.7)
+      '@babel/core': 7.25.8
+      '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.8)
     transitivePeerDependencies:
       - supports-color
-    dev: true
 
-  /bail@2.0.2:
-    resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==}
+  bail@2.0.2: {}
 
-  /balanced-match@1.0.2:
-    resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+  balanced-match@1.0.2: {}
 
-  /base-64@1.0.0:
-    resolution: {integrity: sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==}
+  base-64@1.0.0: {}
 
-  /base64-js@1.5.1:
-    resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+  base64-js@1.5.1: {}
 
-  /before-after-hook@2.2.3:
-    resolution: {integrity: sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==}
-    dev: true
+  before-after-hook@2.2.3: {}
 
-  /binary-extensions@2.2.0:
-    resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
-    engines: {node: '>=8'}
+  bin-links@4.0.4:
+    dependencies:
+      cmd-shim: 6.0.3
+      npm-normalize-package-bin: 3.0.1
+      read-cmd-shim: 4.0.0
+      write-file-atomic: 5.0.1
 
-  /bl@4.1.0:
-    resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
+  binary-extensions@2.2.0: {}
+
+  bl@4.1.0:
     dependencies:
       buffer: 5.7.1
       inherits: 2.0.4
       readable-stream: 3.6.0
-    dev: true
 
-  /bl@5.1.0:
-    resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==}
-    dependencies:
-      buffer: 6.0.3
-      inherits: 2.0.4
-      readable-stream: 3.6.0
+  bluebird@3.7.2: {}
 
-  /bluebird@3.7.2:
-    resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
-    dev: true
-
-  /boxen@7.1.1:
-    resolution: {integrity: sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==}
-    engines: {node: '>=14.16'}
+  boxen@8.0.1:
     dependencies:
       ansi-align: 3.0.1
-      camelcase: 7.0.1
+      camelcase: 8.0.0
       chalk: 5.3.0
       cli-boxes: 3.0.0
-      string-width: 5.1.2
-      type-fest: 2.19.0
-      widest-line: 4.0.1
-      wrap-ansi: 8.1.0
+      string-width: 7.2.0
+      type-fest: 4.26.1
+      widest-line: 5.0.0
+      wrap-ansi: 9.0.0
 
-  /brace-expansion@1.1.11:
-    resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+  brace-expansion@1.1.11:
     dependencies:
       balanced-match: 1.0.2
       concat-map: 0.0.1
 
-  /brace-expansion@2.0.1:
-    resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+  brace-expansion@2.0.1:
     dependencies:
       balanced-match: 1.0.2
-    dev: true
 
-  /braces@3.0.2:
-    resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
-    engines: {node: '>=8'}
+  braces@3.0.2:
     dependencies:
       fill-range: 7.0.1
 
-  /browserslist@4.22.1:
-    resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==}
-    engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
-    hasBin: true
+  braces@3.0.3:
     dependencies:
-      caniuse-lite: 1.0.30001559
-      electron-to-chromium: 1.4.574
-      node-releases: 2.0.13
-      update-browserslist-db: 1.0.13(browserslist@4.22.1)
-    dev: false
+      fill-range: 7.1.1
 
-  /browserslist@4.22.2:
-    resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==}
-    engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
-    hasBin: true
+  browserslist@4.24.0:
     dependencies:
-      caniuse-lite: 1.0.30001572
-      electron-to-chromium: 1.4.616
-      node-releases: 2.0.14
-      update-browserslist-db: 1.0.13(browserslist@4.22.2)
+      caniuse-lite: 1.0.30001669
+      electron-to-chromium: 1.5.41
+      node-releases: 2.0.18
+      update-browserslist-db: 1.1.1(browserslist@4.24.0)
 
-  /buffer-alloc-unsafe@1.1.0:
-    resolution: {integrity: sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==}
-    dev: false
+  buffer-alloc-unsafe@1.1.0: {}
 
-  /buffer-alloc@1.2.0:
-    resolution: {integrity: sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==}
+  buffer-alloc@1.2.0:
     dependencies:
       buffer-alloc-unsafe: 1.1.0
       buffer-fill: 1.0.0
-    dev: false
 
-  /buffer-fill@1.0.0:
-    resolution: {integrity: sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==}
-    dev: false
+  buffer-fill@1.0.0: {}
 
-  /buffer-from@1.1.2:
-    resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+  buffer-from@1.1.2: {}
 
-  /buffer@5.7.1:
-    resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
-    dependencies:
-      base64-js: 1.5.1
-      ieee754: 1.2.1
-    dev: true
-
-  /buffer@6.0.3:
-    resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+  buffer@5.7.1:
     dependencies:
       base64-js: 1.5.1
       ieee754: 1.2.1
 
-  /builtin-modules@3.3.0:
-    resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
-    engines: {node: '>=6'}
-    dev: true
+  builtin-modules@3.3.0: {}
 
-  /builtins@1.0.3:
-    resolution: {integrity: sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==}
-    dev: true
-
-  /builtins@5.0.1:
-    resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==}
+  builtins@5.0.1:
     dependencies:
-      semver: 7.5.4
+      semver: 7.6.3
 
-  /byte-size@8.1.1:
-    resolution: {integrity: sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg==}
-    engines: {node: '>=12.17'}
-    dev: true
+  byte-size@8.1.1: {}
 
-  /cac@6.7.14:
-    resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
-    engines: {node: '>=8'}
-    dev: true
+  cac@6.7.14: {}
 
-  /cacache@17.0.6:
-    resolution: {integrity: sha512-ixcYmEBExFa/+ajIPjcwypxL97CjJyOsH9A/W+4qgEPIpJvKlC+HmVY8nkIck6n3PwUTdgq9c489niJGwl+5Cw==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+  cacache@18.0.4:
     dependencies:
-      '@npmcli/fs': 3.1.0
-      fs-minipass: 3.0.2
-      glob: 10.2.2
-      lru-cache: 7.18.3
-      minipass: 5.0.0
-      minipass-collect: 1.0.2
-      minipass-flush: 1.0.5
-      minipass-pipeline: 1.2.4
-      p-map: 4.0.0
-      promise-inflight: 1.0.1
-      ssri: 10.0.4
-      tar: 6.1.13
-      unique-filename: 3.0.0
-    transitivePeerDependencies:
-      - bluebird
-    dev: true
-
-  /cacache@18.0.1:
-    resolution: {integrity: sha512-g4Uf2CFZPaxtJKre6qr4zqLDOOPU7bNVhWjlNhvzc51xaTOx2noMOLhfFkTAqwtrAZAKQUuDfyjitzilpA8WsQ==}
-    engines: {node: ^16.14.0 || >=18.0.0}
-    dependencies:
-      '@npmcli/fs': 3.1.0
-      fs-minipass: 3.0.2
-      glob: 10.2.2
-      lru-cache: 10.1.0
-      minipass: 7.0.4
+      '@npmcli/fs': 3.1.1
+      fs-minipass: 3.0.3
+      glob: 10.4.5
+      lru-cache: 10.4.3
+      minipass: 7.1.2
       minipass-collect: 2.0.1
       minipass-flush: 1.0.5
       minipass-pipeline: 1.2.4
       p-map: 4.0.0
-      ssri: 10.0.4
-      tar: 6.1.13
+      ssri: 10.0.6
+      tar: 6.2.1
       unique-filename: 3.0.0
-    dev: true
 
-  /cache-point@2.0.0:
-    resolution: {integrity: sha512-4gkeHlFpSKgm3vm2gJN5sPqfmijYRFYCQ6tv5cLw0xVmT6r1z1vd4FNnpuOREco3cBs1G709sZ72LdgddKvL5w==}
-    engines: {node: '>=8'}
+  cache-point@2.0.0:
     dependencies:
       array-back: 4.0.2
       fs-then-native: 2.0.0
       mkdirp2: 1.0.5
-    dev: true
 
-  /call-bind@1.0.2:
-    resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
+  call-bind@1.0.2:
     dependencies:
       function-bind: 1.1.2
       get-intrinsic: 1.2.2
-    dev: true
 
-  /call-bind@1.0.5:
-    resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==}
+  call-bind@1.0.5:
     dependencies:
       function-bind: 1.1.2
       get-intrinsic: 1.2.2
       set-function-length: 1.1.1
-    dev: true
 
-  /callsites@3.1.0:
-    resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
-    engines: {node: '>=6'}
+  call-bind@1.0.7:
+    dependencies:
+      es-define-property: 1.0.0
+      es-errors: 1.3.0
+      function-bind: 1.1.2
+      get-intrinsic: 1.2.4
+      set-function-length: 1.2.2
 
-  /camelcase-css@2.0.1:
-    resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
-    engines: {node: '>= 6'}
-    dev: false
+  callsites@3.1.0: {}
 
-  /camelcase-keys@6.2.2:
-    resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==}
-    engines: {node: '>=8'}
+  camelcase-css@2.0.1: {}
+
+  camelcase-keys@6.2.2:
     dependencies:
       camelcase: 5.3.1
       map-obj: 4.3.0
       quick-lru: 4.0.1
-    dev: true
 
-  /camelcase@5.3.1:
-    resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
-    engines: {node: '>=6'}
+  camelcase@5.3.1: {}
 
-  /camelcase@7.0.1:
-    resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==}
-    engines: {node: '>=14.16'}
+  camelcase@8.0.0: {}
 
-  /caniuse-lite@1.0.30001559:
-    resolution: {integrity: sha512-cPiMKZgqgkg5LY3/ntGeLFUpi6tzddBNS58A4tnTgQw1zON7u2sZMU7SzOeVH4tj20++9ggL+V6FDOFMTaFFYA==}
-    dev: false
+  caniuse-lite@1.0.30001669: {}
 
-  /caniuse-lite@1.0.30001572:
-    resolution: {integrity: sha512-1Pbh5FLmn5y4+QhNyJE9j3/7dK44dGB83/ZMjv/qJk86TvDbjk0LosiZo0i0WB0Vx607qMX9jYrn1VLHCkN4rw==}
-
-  /catharsis@0.9.0:
-    resolution: {integrity: sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==}
-    engines: {node: '>= 10'}
+  catharsis@0.9.0:
     dependencies:
       lodash: 4.17.21
-    dev: true
 
-  /ccount@2.0.1:
-    resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==}
+  ccount@2.0.1: {}
 
-  /chai@4.3.10:
-    resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==}
-    engines: {node: '>=4'}
+  chai@5.1.1:
     dependencies:
-      assertion-error: 1.1.0
-      check-error: 1.0.3
-      deep-eql: 4.1.3
-      get-func-name: 2.0.2
-      loupe: 2.3.7
-      pathval: 1.1.1
-      type-detect: 4.0.8
-    dev: true
+      assertion-error: 2.0.1
+      check-error: 2.1.1
+      deep-eql: 5.0.2
+      loupe: 3.1.2
+      pathval: 2.0.0
 
-  /chalk@2.4.2:
-    resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
-    engines: {node: '>=4'}
+  chalk@2.4.2:
     dependencies:
       ansi-styles: 3.2.1
       escape-string-regexp: 1.0.5
       supports-color: 5.5.0
 
-  /chalk@4.1.0:
-    resolution: {integrity: sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==}
-    engines: {node: '>=10'}
-    dependencies:
-      ansi-styles: 4.3.0
-      supports-color: 7.2.0
-    dev: true
-
-  /chalk@4.1.2:
-    resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
-    engines: {node: '>=10'}
+  chalk@4.1.0:
     dependencies:
       ansi-styles: 4.3.0
       supports-color: 7.2.0
 
-  /chalk@5.3.0:
-    resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
-    engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
-
-  /character-entities-html4@2.1.0:
-    resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
-
-  /character-entities-legacy@3.0.0:
-    resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
-
-  /character-entities@2.0.2:
-    resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
-
-  /character-reference-invalid@2.0.1:
-    resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==}
-    dev: false
-
-  /chardet@0.7.0:
-    resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
-    dev: true
-
-  /check-error@1.0.3:
-    resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+  chalk@4.1.2:
     dependencies:
-      get-func-name: 2.0.2
-    dev: true
+      ansi-styles: 4.3.0
+      supports-color: 7.2.0
 
-  /chokidar@3.5.3:
-    resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
-    engines: {node: '>= 8.10.0'}
+  chalk@5.3.0: {}
+
+  character-entities-html4@2.1.0: {}
+
+  character-entities-legacy@3.0.0: {}
+
+  character-entities@2.0.2: {}
+
+  character-reference-invalid@2.0.1: {}
+
+  chardet@0.7.0: {}
+
+  check-error@2.1.1: {}
+
+  chokidar@3.5.3:
     dependencies:
       anymatch: 3.1.3
       braces: 3.0.2
@@ -6137,312 +11254,187 @@ packages:
     optionalDependencies:
       fsevents: 2.3.3
 
-  /chord-voicings@0.0.1:
-    resolution: {integrity: sha512-SutgB/4ynkkuiK6qdQ/k3QvCFcH0Vj8Ch4t6LbRyRQbVzP/TOztiCk3kvXd516UZ6fqk7ijDRELEFcKN+6V8sA==}
+  chord-voicings@0.0.1:
     dependencies:
       '@tonaljs/tonal': 4.10.0
-    dev: false
 
-  /chownr@1.1.4:
-    resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==}
-    dev: true
+  chownr@1.1.4: {}
 
-  /chownr@2.0.0:
-    resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==}
-    engines: {node: '>=10'}
-    dev: true
+  chownr@2.0.0: {}
 
-  /ci-info@3.9.0:
-    resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
-    engines: {node: '>=8'}
+  ci-info@3.9.0: {}
 
-  /ci-info@4.0.0:
-    resolution: {integrity: sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==}
-    engines: {node: '>=8'}
+  ci-info@4.0.0: {}
 
-  /claviature@0.1.0:
-    resolution: {integrity: sha512-Ai12axNwQ7x/F9QAj64RYKsgvi5Y33+X3GUSKAC/9s/adEws8TSSc0efeiqhKNGKBo6rT/c+CSCwSXzXxwxZzQ==}
-    dev: false
+  claviature@0.1.0: {}
 
-  /clean-stack@2.2.0:
-    resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==}
-    engines: {node: '>=6'}
-    dev: true
+  clean-stack@2.2.0: {}
 
-  /cli-boxes@3.0.0:
-    resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==}
-    engines: {node: '>=10'}
+  cli-boxes@3.0.0: {}
 
-  /cli-cursor@3.1.0:
-    resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
-    engines: {node: '>=8'}
+  cli-cursor@3.1.0:
     dependencies:
       restore-cursor: 3.1.0
-    dev: true
 
-  /cli-cursor@4.0.0:
-    resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+  cli-cursor@5.0.0:
     dependencies:
-      restore-cursor: 4.0.0
+      restore-cursor: 5.1.0
 
-  /cli-spinners@2.6.1:
-    resolution: {integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==}
-    engines: {node: '>=6'}
-    dev: true
+  cli-spinners@2.6.1: {}
 
-  /cli-spinners@2.9.1:
-    resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==}
-    engines: {node: '>=6'}
+  cli-spinners@2.9.1: {}
 
-  /cli-width@3.0.0:
-    resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==}
-    engines: {node: '>= 10'}
-    dev: true
+  cli-spinners@2.9.2: {}
 
-  /client-only@0.0.1:
-    resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
-    dev: false
+  cli-width@3.0.0: {}
 
-  /cliui@6.0.0:
-    resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==}
+  client-only@0.0.1: {}
+
+  cliui@6.0.0:
     dependencies:
       string-width: 4.2.3
       strip-ansi: 6.0.1
       wrap-ansi: 6.2.0
-    dev: false
 
-  /cliui@7.0.4:
-    resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==}
+  cliui@7.0.4:
     dependencies:
       string-width: 4.2.3
       strip-ansi: 6.0.1
       wrap-ansi: 7.0.0
-    dev: true
 
-  /cliui@8.0.1:
-    resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
-    engines: {node: '>=12'}
+  cliui@8.0.1:
     dependencies:
       string-width: 4.2.3
       strip-ansi: 6.0.1
       wrap-ansi: 7.0.0
-    dev: true
 
-  /clone-buffer@1.0.0:
-    resolution: {integrity: sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==}
-    engines: {node: '>= 0.10'}
-    dev: false
+  clone-buffer@1.0.0: {}
 
-  /clone-deep@4.0.1:
-    resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==}
-    engines: {node: '>=6'}
+  clone-deep@4.0.1:
     dependencies:
       is-plain-object: 2.0.4
       kind-of: 6.0.3
       shallow-clone: 3.0.1
-    dev: true
 
-  /clone-stats@1.0.0:
-    resolution: {integrity: sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==}
-    dev: false
+  clone-stats@1.0.0: {}
 
-  /clone@1.0.4:
-    resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
-    engines: {node: '>=0.8'}
-    dev: true
+  clone@1.0.4: {}
 
-  /clone@2.1.2:
-    resolution: {integrity: sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==}
-    engines: {node: '>=0.8'}
-    dev: false
+  clone@2.1.2: {}
 
-  /cloneable-readable@1.1.3:
-    resolution: {integrity: sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==}
+  cloneable-readable@1.1.3:
     dependencies:
       inherits: 2.0.4
       process-nextick-args: 2.0.1
       readable-stream: 2.3.7
-    dev: false
 
-  /clsx@2.0.0:
-    resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==}
-    engines: {node: '>=6'}
+  clsx@2.1.1: {}
 
-  /cmd-shim@6.0.1:
-    resolution: {integrity: sha512-S9iI9y0nKR4hwEQsVWpyxld/6kRfGepGfzff83FcaiEBpmvlbA2nnGe7Cylgrx2f/p1P5S5wpRm9oL8z1PbS3Q==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
-    dev: true
+  cmd-shim@6.0.3: {}
 
-  /collapse-white-space@2.1.0:
-    resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==}
-    dev: false
+  collapse-white-space@2.1.0: {}
 
-  /collect-all@1.0.4:
-    resolution: {integrity: sha512-RKZhRwJtJEP5FWul+gkSMEnaK6H3AGPTTWOiRimCcs+rc/OmQE3Yhy1Q7A7KsdkG3ZXVdZq68Y6ONSdvkeEcKA==}
-    engines: {node: '>=0.10.0'}
+  collect-all@1.0.4:
     dependencies:
       stream-connect: 1.0.2
       stream-via: 1.0.4
-    dev: true
 
-  /color-convert@1.9.3:
-    resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
+  color-convert@1.9.3:
     dependencies:
       color-name: 1.1.3
 
-  /color-convert@2.0.1:
-    resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
-    engines: {node: '>=7.0.0'}
+  color-convert@2.0.1:
     dependencies:
       color-name: 1.1.4
 
-  /color-name@1.1.3:
-    resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
+  color-name@1.1.3: {}
 
-  /color-name@1.1.4:
-    resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+  color-name@1.1.4: {}
 
-  /color-string@1.9.1:
-    resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==}
-    requiresBuild: true
+  color-string@1.9.1:
     dependencies:
       color-name: 1.1.4
       simple-swizzle: 0.2.2
 
-  /color-support@1.1.3:
-    resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==}
-    hasBin: true
-    dev: true
+  color-support@1.1.3: {}
 
-  /color@4.2.3:
-    resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==}
-    engines: {node: '>=12.5.0'}
-    requiresBuild: true
+  color@4.2.3:
     dependencies:
       color-convert: 2.0.1
       color-string: 1.9.1
 
-  /columnify@1.6.0:
-    resolution: {integrity: sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==}
-    engines: {node: '>=8.0.0'}
+  columnify@1.6.0:
     dependencies:
       strip-ansi: 6.0.1
       wcwidth: 1.0.1
-    dev: true
 
-  /combined-stream@1.0.8:
-    resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
-    engines: {node: '>= 0.8'}
+  combined-stream@1.0.8:
     dependencies:
       delayed-stream: 1.0.0
-    dev: true
 
-  /comlink@4.3.1:
-    resolution: {integrity: sha512-+YbhUdNrpBZggBAHWcgQMLPLH1KDF3wJpeqrCKieWQ8RL7atmgsgTQko1XEBK6PsecfopWNntopJ+ByYG1lRaA==}
-    dev: false
+  comlink@4.3.1: {}
 
-  /comma-separated-tokens@2.0.3:
-    resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
+  comma-separated-tokens@2.0.3: {}
 
-  /command-line-args@5.2.1:
-    resolution: {integrity: sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==}
-    engines: {node: '>=4.0.0'}
+  command-line-args@5.2.1:
     dependencies:
       array-back: 3.1.0
       find-replace: 3.0.0
       lodash.camelcase: 4.3.0
       typical: 4.0.0
-    dev: true
 
-  /command-line-tool@0.8.0:
-    resolution: {integrity: sha512-Xw18HVx/QzQV3Sc5k1vy3kgtOeGmsKIqwtFFoyjI4bbcpSgnw2CWVULvtakyw4s6fhyAdI6soQQhXc2OzJy62g==}
-    engines: {node: '>=4.0.0'}
+  command-line-tool@0.8.0:
     dependencies:
       ansi-escape-sequences: 4.1.0
       array-back: 2.0.0
       command-line-args: 5.2.1
       command-line-usage: 4.1.0
       typical: 2.6.1
-    dev: true
 
-  /command-line-usage@4.1.0:
-    resolution: {integrity: sha512-MxS8Ad995KpdAC0Jopo/ovGIroV/m0KHwzKfXxKag6FHOkGsH8/lv5yjgablcRxCJJC0oJeUMuO/gmaq+Wq46g==}
-    engines: {node: '>=4.0.0'}
+  command-line-usage@4.1.0:
     dependencies:
       ansi-escape-sequences: 4.1.0
       array-back: 2.0.0
       table-layout: 0.4.5
       typical: 2.6.1
-    dev: true
 
-  /commander@10.0.1:
-    resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
-    engines: {node: '>=14'}
-    dev: true
+  commander@10.0.1: {}
 
-  /commander@2.20.3:
-    resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
-    dev: true
+  commander@2.20.3: {}
 
-  /commander@4.1.1:
-    resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
-    engines: {node: '>= 6'}
-    dev: false
+  commander@4.1.1: {}
 
-  /common-ancestor-path@1.0.1:
-    resolution: {integrity: sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==}
+  common-ancestor-path@1.0.1: {}
 
-  /common-sequence@2.0.2:
-    resolution: {integrity: sha512-jAg09gkdkrDO9EWTdXfv80WWH3yeZl5oT69fGfedBNS9pXUKYInVJ1bJ+/ht2+Moeei48TmSbQDYMc8EOx9G0g==}
-    engines: {node: '>=8'}
-    dev: true
+  common-sequence@2.0.2: {}
 
-  /common-tags@1.8.2:
-    resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==}
-    engines: {node: '>=4.0.0'}
-    dev: true
+  common-tags@1.8.2: {}
 
-  /compare-func@2.0.0:
-    resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==}
+  compare-func@2.0.0:
     dependencies:
       array-ify: 1.0.0
       dot-prop: 5.3.0
-    dev: true
 
-  /concat-map@0.0.1:
-    resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+  concat-map@0.0.1: {}
 
-  /concat-stream@2.0.0:
-    resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==}
-    engines: {'0': node >= 6.0}
+  concat-stream@2.0.0:
     dependencies:
       buffer-from: 1.1.2
       inherits: 2.0.4
       readable-stream: 3.6.0
       typedarray: 0.0.6
-    dev: true
 
-  /config-master@3.1.0:
-    resolution: {integrity: sha512-n7LBL1zBzYdTpF1mx5DNcZnZn05CWIdsdvtPL4MosvqbBUK3Rq6VWEtGUuF3Y0s9/CIhMejezqlSkP6TnCJ/9g==}
+  config-master@3.1.0:
     dependencies:
       walk-back: 2.0.1
-    dev: true
 
-  /console-control-strings@1.1.0:
-    resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==}
-    dev: true
+  console-control-strings@1.1.0: {}
 
-  /conventional-changelog-angular@7.0.0:
-    resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==}
-    engines: {node: '>=16'}
+  conventional-changelog-angular@7.0.0:
     dependencies:
       compare-func: 2.0.0
-    dev: true
 
-  /conventional-changelog-core@5.0.1:
-    resolution: {integrity: sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A==}
-    engines: {node: '>=14'}
+  conventional-changelog-core@5.0.1:
     dependencies:
       add-stream: 1.0.0
       conventional-changelog-writer: 6.0.1
@@ -6455,50 +11447,32 @@ packages:
       normalize-package-data: 3.0.3
       read-pkg: 3.0.0
       read-pkg-up: 3.0.0
-    dev: true
 
-  /conventional-changelog-preset-loader@3.0.0:
-    resolution: {integrity: sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA==}
-    engines: {node: '>=14'}
-    dev: true
+  conventional-changelog-preset-loader@3.0.0: {}
 
-  /conventional-changelog-writer@6.0.1:
-    resolution: {integrity: sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ==}
-    engines: {node: '>=14'}
-    hasBin: true
+  conventional-changelog-writer@6.0.1:
     dependencies:
       conventional-commits-filter: 3.0.0
       dateformat: 3.0.3
-      handlebars: 4.7.7
+      handlebars: 4.7.8
       json-stringify-safe: 5.0.1
       meow: 8.1.2
-      semver: 7.5.4
+      semver: 7.6.3
       split: 1.0.1
-    dev: true
 
-  /conventional-commits-filter@3.0.0:
-    resolution: {integrity: sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q==}
-    engines: {node: '>=14'}
+  conventional-commits-filter@3.0.0:
     dependencies:
       lodash.ismatch: 4.4.0
       modify-values: 1.0.1
-    dev: true
 
-  /conventional-commits-parser@4.0.0:
-    resolution: {integrity: sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==}
-    engines: {node: '>=14'}
-    hasBin: true
+  conventional-commits-parser@4.0.0:
     dependencies:
       JSONStream: 1.3.5
       is-text-path: 1.0.1
       meow: 8.1.2
       split2: 3.2.2
-    dev: true
 
-  /conventional-recommended-bump@7.0.1:
-    resolution: {integrity: sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA==}
-    engines: {node: '>=14'}
-    hasBin: true
+  conventional-recommended-bump@7.0.1:
     dependencies:
       concat-stream: 2.0.0
       conventional-changelog-preset-loader: 3.0.0
@@ -6507,548 +11481,325 @@ packages:
       git-raw-commits: 3.0.0
       git-semver-tags: 5.0.1
       meow: 8.1.2
-    dev: true
 
-  /convert-source-map@2.0.0:
-    resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+  convert-source-map@2.0.0: {}
 
-  /cookie@0.6.0:
-    resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
-    engines: {node: '>= 0.6'}
+  cookie@0.7.2: {}
 
-  /core-js-compat@3.35.0:
-    resolution: {integrity: sha512-5blwFAddknKeNgsjBzilkdQ0+YK8L1PfqPYq40NOYMYFSS38qj+hpTcLLWwpIwA2A5bje/x5jmVn2tzUMg9IVw==}
+  core-js-compat@3.38.1:
     dependencies:
-      browserslist: 4.22.2
-    dev: true
+      browserslist: 4.24.0
 
-  /core-util-is@1.0.3:
-    resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
+  core-util-is@1.0.3: {}
 
-  /cosmiconfig@8.3.6(typescript@5.3.3):
-    resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==}
-    engines: {node: '>=14'}
-    peerDependencies:
-      typescript: '>=4.9.5'
-    peerDependenciesMeta:
-      typescript:
-        optional: true
+  cosmiconfig@8.3.6(typescript@5.3.3):
     dependencies:
       import-fresh: 3.3.0
       js-yaml: 4.1.0
       parse-json: 5.2.0
       path-type: 4.0.0
+    optionalDependencies:
       typescript: 5.3.3
-    dev: true
 
-  /cowsay@1.6.0:
-    resolution: {integrity: sha512-8C4H1jdrgNusTQr3Yu4SCm+ZKsAlDFbpa0KS0Z3im8ueag+9pGOf3CrioruvmeaW/A5oqg9L0ar6qeftAh03jw==}
-    engines: {node: '>= 4'}
-    hasBin: true
+  cowsay@1.6.0:
     dependencies:
       get-stdin: 8.0.0
       string-width: 2.1.1
       strip-final-newline: 2.0.0
       yargs: 15.4.1
-    dev: false
 
-  /crelt@1.0.5:
-    resolution: {integrity: sha512-+BO9wPPi+DWTDcNYhr/W90myha8ptzftZT+LwcmUbbok0rcP/fequmFYCw8NMoH7pkAZQzU78b3kYrlua5a9eA==}
-    dev: false
+  crelt@1.0.5: {}
 
-  /crelt@1.0.6:
-    resolution: {integrity: sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==}
-    dev: false
+  crelt@1.0.6: {}
 
-  /cross-spawn@7.0.3:
-    resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
-    engines: {node: '>= 8'}
+  cross-spawn@7.0.3:
     dependencies:
       path-key: 3.1.1
       shebang-command: 2.0.0
       which: 2.0.2
 
-  /crypto-random-string@2.0.0:
-    resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==}
-    engines: {node: '>=8'}
-    dev: true
+  crypto-random-string@2.0.0: {}
 
-  /cssesc@3.0.0:
-    resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
-    engines: {node: '>=4'}
-    hasBin: true
-    dev: false
+  cssesc@3.0.0: {}
 
-  /csstype@3.1.1:
-    resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==}
-    dev: false
+  csstype@3.1.1: {}
 
-  /csv-generate@4.3.1:
-    resolution: {integrity: sha512-7YeeJq+44/I/O5N2sr2qBMcHZXhpfe38eh7DOFxyMtYO+Pir7kIfgFkW5MPksqKqqR6+/wX7UGoZm1Ot11151w==}
-    dev: false
+  csv-generate@4.4.1: {}
 
-  /csv-parse@5.5.3:
-    resolution: {integrity: sha512-v0KW6C0qlZzoGjk6u5tLmVfyZxNgPGXZsWTXshpAgKVGmGXzaVWGdlCFxNx5iuzcXT/oJN1HHM9DZKwtAtYa+A==}
-    dev: false
+  csv-parse@5.5.6: {}
 
-  /csv-stringify@6.4.5:
-    resolution: {integrity: sha512-SPu1Vnh8U5EnzpNOi1NDBL5jU5Rx7DVHr15DNg9LXDTAbQlAVAmEbVt16wZvEW9Fu9Qt4Ji8kmeCJ2B1+4rFTQ==}
-    dev: false
+  csv-stringify@6.5.1: {}
 
-  /csv@6.3.6:
-    resolution: {integrity: sha512-jsEsX2HhGp7xiwrJu5srQavKsh+HUJcCi78Ar3m4jlmFKRoTkkMy7ZZPP+LnQChmaztW+uj44oyfMb59daAs/Q==}
-    engines: {node: '>= 0.1.90'}
+  csv@6.3.10:
     dependencies:
-      csv-generate: 4.3.1
-      csv-parse: 5.5.3
-      csv-stringify: 6.4.5
-      stream-transform: 3.3.0
-    dev: false
+      csv-generate: 4.4.1
+      csv-parse: 5.5.6
+      csv-stringify: 6.5.1
+      stream-transform: 3.3.2
 
-  /dargs@7.0.0:
-    resolution: {integrity: sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==}
-    engines: {node: '>=8'}
-    dev: true
+  dargs@7.0.0: {}
 
-  /data-uri-to-buffer@4.0.1:
-    resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==}
-    engines: {node: '>= 12'}
-    dev: true
+  data-uri-to-buffer@4.0.1: {}
 
-  /date-fns@3.2.0:
-    resolution: {integrity: sha512-E4KWKavANzeuusPi0jUjpuI22SURAznGkx7eZV+4i6x2A+IZxAMcajgkvuDAU1bg40+xuhW1zRdVIIM/4khuIg==}
-    dev: false
+  data-view-buffer@1.0.1:
+    dependencies:
+      call-bind: 1.0.7
+      es-errors: 1.3.0
+      is-data-view: 1.0.1
 
-  /dateformat@3.0.3:
-    resolution: {integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==}
-    dev: true
+  data-view-byte-length@1.0.1:
+    dependencies:
+      call-bind: 1.0.7
+      es-errors: 1.3.0
+      is-data-view: 1.0.1
 
-  /dct@0.1.0:
-    resolution: {integrity: sha512-/uUtEniuMq1aUxvLAoDtAduyl12oM1zhA/le2f83UFN/9+4KDHXFB6znEfoj5SDDLiTpUTr26NpxC7t8IFOYhQ==}
-    engines: {node: '>=0.12.0'}
-    dev: false
+  data-view-byte-offset@1.0.0:
+    dependencies:
+      call-bind: 1.0.7
+      es-errors: 1.3.0
+      is-data-view: 1.0.1
 
-  /debug@2.6.9:
-    resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
-    peerDependencies:
-      supports-color: '*'
-    peerDependenciesMeta:
-      supports-color:
-        optional: true
+  date-fns@3.6.0: {}
+
+  dateformat@3.0.3: {}
+
+  dct@0.1.0: {}
+
+  debug@2.6.9:
     dependencies:
       ms: 2.0.0
 
-  /debug@3.2.7:
-    resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
-    peerDependencies:
-      supports-color: '*'
-    peerDependenciesMeta:
-      supports-color:
-        optional: true
+  debug@3.2.7:
     dependencies:
       ms: 2.1.3
 
-  /debug@4.3.4:
-    resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
-    engines: {node: '>=6.0'}
-    peerDependencies:
-      supports-color: '*'
-    peerDependenciesMeta:
-      supports-color:
-        optional: true
+  debug@4.3.7:
     dependencies:
-      ms: 2.1.2
+      ms: 2.1.3
 
-  /decamelize-keys@1.1.1:
-    resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==}
-    engines: {node: '>=0.10.0'}
+  decamelize-keys@1.1.1:
     dependencies:
       decamelize: 1.2.0
       map-obj: 1.0.1
-    dev: true
 
-  /decamelize@1.2.0:
-    resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==}
-    engines: {node: '>=0.10.0'}
+  decamelize@1.2.0: {}
 
-  /decode-named-character-reference@1.0.2:
-    resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==}
+  decode-named-character-reference@1.0.2:
     dependencies:
       character-entities: 2.0.2
 
-  /decompress-response@6.0.0:
-    resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
-    engines: {node: '>=10'}
+  decompress-response@6.0.0:
     dependencies:
       mimic-response: 3.1.0
-    dev: true
 
-  /dedent@0.7.0:
-    resolution: {integrity: sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==}
-    dev: true
+  dedent@1.5.3: {}
 
-  /deep-eql@4.1.3:
-    resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
-    engines: {node: '>=6'}
-    dependencies:
-      type-detect: 4.0.8
-    dev: true
+  deep-eql@5.0.2: {}
 
-  /deep-extend@0.6.0:
-    resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
-    engines: {node: '>=4.0.0'}
-    dev: true
+  deep-extend@0.6.0: {}
 
-  /deep-is@0.1.4:
-    resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+  deep-is@0.1.4: {}
 
-  /deepmerge@4.3.1:
-    resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
-    engines: {node: '>=0.10.0'}
-    dev: true
+  deepmerge@4.3.1: {}
 
-  /defaults@1.0.4:
-    resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
+  defaults@1.0.4:
     dependencies:
       clone: 1.0.4
-    dev: true
 
-  /define-data-property@1.1.1:
-    resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==}
-    engines: {node: '>= 0.4'}
+  define-data-property@1.1.1:
     dependencies:
-      get-intrinsic: 1.2.2
+      get-intrinsic: 1.2.4
       gopd: 1.0.1
       has-property-descriptors: 1.0.0
-    dev: true
 
-  /define-lazy-prop@2.0.0:
-    resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
-    engines: {node: '>=8'}
-    dev: true
+  define-data-property@1.1.4:
+    dependencies:
+      es-define-property: 1.0.0
+      es-errors: 1.3.0
+      gopd: 1.0.1
 
-  /define-properties@1.2.1:
-    resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
-    engines: {node: '>= 0.4'}
+  define-lazy-prop@2.0.0: {}
+
+  define-properties@1.2.1:
     dependencies:
       define-data-property: 1.1.1
       has-property-descriptors: 1.0.0
       object-keys: 1.1.1
-    dev: true
 
-  /delayed-stream@1.0.0:
-    resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
-    engines: {node: '>=0.4.0'}
-    dev: true
+  delayed-stream@1.0.0: {}
 
-  /delegates@1.0.0:
-    resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==}
-    dev: true
-
-  /depd@1.1.2:
-    resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==}
-    engines: {node: '>= 0.6'}
-    dev: true
-
-  /dependency-tree@10.0.9:
-    resolution: {integrity: sha512-dwc59FRIsht+HfnTVM0BCjJaEWxdq2YAvEDy4/Hn6CwS3CBWMtFnL3aZGAkQn3XCYxk/YcTDE4jX2Q7bFTwCjA==}
-    engines: {node: '>=14'}
-    hasBin: true
+  dependency-tree@10.0.9:
     dependencies:
       commander: 10.0.1
-      filing-cabinet: 4.1.6
+      filing-cabinet: 4.2.0
       precinct: 11.0.5
-      typescript: 5.3.3
+      typescript: 5.6.3
     transitivePeerDependencies:
       - supports-color
-    dev: true
 
-  /deprecation@2.3.1:
-    resolution: {integrity: sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==}
-    dev: true
+  deprecation@2.3.1: {}
 
-  /dequal@2.0.3:
-    resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
-    engines: {node: '>=6'}
+  dequal@2.0.3: {}
 
-  /detect-indent@5.0.0:
-    resolution: {integrity: sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==}
-    engines: {node: '>=4'}
-    dev: true
+  detect-indent@5.0.0: {}
 
-  /detect-libc@2.0.1:
-    resolution: {integrity: sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==}
-    engines: {node: '>=8'}
-    dev: true
+  detect-libc@2.0.1: {}
 
-  /detect-libc@2.0.2:
-    resolution: {integrity: sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==}
-    engines: {node: '>=8'}
-    requiresBuild: true
+  detect-libc@2.0.3: {}
 
-  /detective-amd@5.0.2:
-    resolution: {integrity: sha512-XFd/VEQ76HSpym80zxM68ieB77unNuoMwopU2TFT/ErUk5n4KvUTwW4beafAVUugrjV48l4BmmR0rh2MglBaiA==}
-    engines: {node: '>=14'}
-    hasBin: true
+  detective-amd@5.0.2:
     dependencies:
       ast-module-types: 5.0.0
       escodegen: 2.1.0
       get-amd-module-type: 5.0.1
       node-source-walk: 6.0.2
-    dev: true
 
-  /detective-cjs@5.0.1:
-    resolution: {integrity: sha512-6nTvAZtpomyz/2pmEmGX1sXNjaqgMplhQkskq2MLrar0ZAIkHMrDhLXkRiK2mvbu9wSWr0V5/IfiTrZqAQMrmQ==}
-    engines: {node: '>=14'}
+  detective-cjs@5.0.1:
     dependencies:
       ast-module-types: 5.0.0
       node-source-walk: 6.0.2
-    dev: true
 
-  /detective-es6@4.0.1:
-    resolution: {integrity: sha512-k3Z5tB4LQ8UVHkuMrFOlvb3GgFWdJ9NqAa2YLUU/jTaWJIm+JJnEh4PsMc+6dfT223Y8ACKOaC0qcj7diIhBKw==}
-    engines: {node: '>=14'}
+  detective-es6@4.0.1:
     dependencies:
       node-source-walk: 6.0.2
-    dev: true
 
-  /detective-postcss@6.1.3:
-    resolution: {integrity: sha512-7BRVvE5pPEvk2ukUWNQ+H2XOq43xENWbH0LcdCE14mwgTBEAMoAx+Fc1rdp76SmyZ4Sp48HlV7VedUnP6GA1Tw==}
-    engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+  detective-postcss@6.1.3:
     dependencies:
       is-url: 1.2.4
-      postcss: 8.4.32
-      postcss-values-parser: 6.0.2(postcss@8.4.32)
-    dev: true
+      postcss: 8.4.47
+      postcss-values-parser: 6.0.2(postcss@8.4.47)
 
-  /detective-sass@5.0.3:
-    resolution: {integrity: sha512-YsYT2WuA8YIafp2RVF5CEfGhhyIVdPzlwQgxSjK+TUm3JoHP+Tcorbk3SfG0cNZ7D7+cYWa0ZBcvOaR0O8+LlA==}
-    engines: {node: '>=14'}
+  detective-sass@5.0.3:
     dependencies:
       gonzales-pe: 4.3.0
       node-source-walk: 6.0.2
-    dev: true
 
-  /detective-scss@4.0.3:
-    resolution: {integrity: sha512-VYI6cHcD0fLokwqqPFFtDQhhSnlFWvU614J42eY6G0s8c+MBhi9QAWycLwIOGxlmD8I/XvGSOUV1kIDhJ70ZPg==}
-    engines: {node: '>=14'}
+  detective-scss@4.0.3:
     dependencies:
       gonzales-pe: 4.3.0
       node-source-walk: 6.0.2
-    dev: true
 
-  /detective-stylus@4.0.0:
-    resolution: {integrity: sha512-TfPotjhszKLgFBzBhTOxNHDsutIxx9GTWjrL5Wh7Qx/ydxKhwUrlSFeLIn+ZaHPF+h0siVBkAQSuy6CADyTxgQ==}
-    engines: {node: '>=14'}
-    dev: true
+  detective-stylus@4.0.0: {}
 
-  /detective-typescript@11.1.0:
-    resolution: {integrity: sha512-Mq8egjnW2NSCkzEb/Az15/JnBI/Ryyl6Po0Y+0mABTFvOS6DAyUGRZqz1nyhu4QJmWWe0zaGs/ITIBeWkvCkGw==}
-    engines: {node: ^14.14.0 || >=16.0.0}
+  detective-typescript@11.2.0:
     dependencies:
-      '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.3.3)
+      '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.3)
       ast-module-types: 5.0.0
       node-source-walk: 6.0.2
-      typescript: 5.3.3
+      typescript: 5.6.3
     transitivePeerDependencies:
       - supports-color
-    dev: true
 
-  /deterministic-object-hash@2.0.2:
-    resolution: {integrity: sha512-KxektNH63SrbfUyDiwXqRb1rLwKt33AmMv+5Nhsw1kqZ13SJBRTgZHtGbE+hH3a1mVW1cz+4pqSWVPAtLVXTzQ==}
-    engines: {node: '>=18'}
+  deterministic-object-hash@2.0.2:
     dependencies:
       base-64: 1.0.0
 
-  /devalue@4.3.2:
-    resolution: {integrity: sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==}
+  devalue@5.1.1: {}
 
-  /devlop@1.1.0:
-    resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
+  devlop@1.1.0:
     dependencies:
       dequal: 2.0.3
 
-  /didyoumean@1.2.2:
-    resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
-    dev: false
+  didyoumean@1.2.2: {}
 
-  /diff-sequences@29.6.3:
-    resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-    dev: true
+  diff-sequences@29.6.3: {}
 
-  /diff@5.1.0:
-    resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==}
-    engines: {node: '>=0.3.1'}
+  diff@5.2.0: {}
 
-  /dir-glob@3.0.1:
-    resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
-    engines: {node: '>=8'}
+  dir-glob@3.0.1:
     dependencies:
       path-type: 4.0.0
-    dev: true
 
-  /djipevents@2.0.7:
-    resolution: {integrity: sha512-KNFYaU85imxOCKOUsIR70Iz9E19r96/X7LSH+u0tSoZdpWcBdzoqtTsU+wuLhc6GMpSFob+KInkZAbfKi01Bjg==}
+  djipevents@2.0.7:
     dependencies:
       '@babel/runtime': 7.20.13
-    dev: false
 
-  /dlv@1.1.3:
-    resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
+  dlv@1.1.3: {}
 
-  /dmd@6.2.0:
-    resolution: {integrity: sha512-uXWxLF1H7TkUAuoHK59/h/ts5cKavm2LnhrIgJWisip4BVzPoXavlwyoprFFn2CzcahKYgvkfaebS6oxzgflkg==}
-    engines: {node: '>=12'}
+  dmd@6.2.3:
     dependencies:
       array-back: 6.2.2
       cache-point: 2.0.0
       common-sequence: 2.0.2
       file-set: 4.0.2
-      handlebars: 4.7.7
-      marked: 4.2.12
+      handlebars: 4.7.8
+      marked: 4.3.0
       object-get: 2.1.1
       reduce-flatten: 3.0.1
       reduce-unique: 2.0.1
       reduce-without: 1.0.1
       test-value: 3.0.0
-      walk-back: 5.1.0
-    dev: true
+      walk-back: 5.1.1
 
-  /doctrine@2.1.0:
-    resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      esutils: 2.0.3
-    dev: true
-
-  /doctrine@3.0.0:
-    resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
-    engines: {node: '>=6.0.0'}
+  doctrine@2.1.0:
     dependencies:
       esutils: 2.0.3
 
-  /dot-prop@5.3.0:
-    resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==}
-    engines: {node: '>=8'}
+  doctrine@3.0.0:
+    dependencies:
+      esutils: 2.0.3
+
+  dot-prop@5.3.0:
     dependencies:
       is-obj: 2.0.0
-    dev: true
 
-  /dotenv-expand@10.0.0:
-    resolution: {integrity: sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==}
-    engines: {node: '>=12'}
-    dev: true
+  dotenv-expand@10.0.0: {}
 
-  /dotenv@16.3.1:
-    resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==}
-    engines: {node: '>=12'}
-    dev: true
+  dotenv@16.3.1: {}
 
-  /dset@3.1.3:
-    resolution: {integrity: sha512-20TuZZHCEZ2O71q9/+8BwKwZ0QtD9D8ObhrihJPr+vLLYlSuAU3/zL4cSlgbfeoGHTjCSJBa7NGcrF9/Bx/WJQ==}
-    engines: {node: '>=4'}
+  dset@3.1.4: {}
 
-  /duplexer@0.1.2:
-    resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
-    dev: true
+  duplexer@0.1.2: {}
 
-  /eastasianwidth@0.2.0:
-    resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+  eastasianwidth@0.2.0: {}
 
-  /ejs@3.1.8:
-    resolution: {integrity: sha512-/sXZeMlhS0ArkfX2Aw780gJzXSMPnKjtspYZv+f3NiKLlubezAHDU5+9xz6gd3/NhG3txQCo6xlglmTS+oTGEQ==}
-    engines: {node: '>=0.10.0'}
-    hasBin: true
+  ejs@3.1.10:
+    dependencies:
+      jake: 10.9.2
+
+  ejs@3.1.8:
     dependencies:
       jake: 10.8.5
-    dev: true
 
-  /ejs@3.1.9:
-    resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==}
-    engines: {node: '>=0.10.0'}
-    hasBin: true
-    dependencies:
-      jake: 10.8.7
-    dev: true
+  electron-to-chromium@1.5.41: {}
 
-  /electron-to-chromium@1.4.574:
-    resolution: {integrity: sha512-bg1m8L0n02xRzx4LsTTMbBPiUd9yIR+74iPtS/Ao65CuXvhVZHP0ym1kSdDG3yHFDXqHQQBKujlN1AQ8qZnyFg==}
-    dev: false
+  emoji-regex@10.4.0: {}
 
-  /electron-to-chromium@1.4.616:
-    resolution: {integrity: sha512-1n7zWYh8eS0L9Uy+GskE0lkBUNK83cXTVJI0pU3mGprFsbfSdAc15VTFbo+A+Bq4pwstmL30AVcEU3Fo463lNg==}
+  emoji-regex@8.0.0: {}
 
-  /emoji-regex@10.3.0:
-    resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==}
+  emoji-regex@9.2.2: {}
 
-  /emoji-regex@8.0.0:
-    resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
-
-  /emoji-regex@9.2.2:
-    resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
-
-  /encoding@0.1.13:
-    resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==}
-    requiresBuild: true
+  encoding@0.1.13:
     dependencies:
       iconv-lite: 0.6.3
-    dev: true
     optional: true
 
-  /end-of-stream@1.4.4:
-    resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
+  end-of-stream@1.4.4:
     dependencies:
       once: 1.4.0
-    dev: true
 
-  /enhanced-resolve@5.15.0:
-    resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==}
-    engines: {node: '>=10.13.0'}
+  enhanced-resolve@5.17.1:
     dependencies:
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       tapable: 2.2.1
-    dev: true
 
-  /enquirer@2.3.6:
-    resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==}
-    engines: {node: '>=8.6'}
+  enquirer@2.3.6:
     dependencies:
       ansi-colors: 4.1.3
-    dev: true
 
-  /entities@2.1.0:
-    resolution: {integrity: sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==}
-    dev: true
+  entities@4.5.0: {}
 
-  /entities@4.5.0:
-    resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
-    engines: {node: '>=0.12'}
+  env-paths@2.2.1: {}
 
-  /env-paths@2.2.1:
-    resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==}
-    engines: {node: '>=6'}
-    dev: true
+  envinfo@7.13.0: {}
 
-  /envinfo@7.8.1:
-    resolution: {integrity: sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==}
-    engines: {node: '>=4'}
-    hasBin: true
-    dev: true
+  err-code@2.0.3: {}
 
-  /err-code@2.0.3:
-    resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==}
-    dev: true
-
-  /error-ex@1.3.2:
-    resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
+  error-ex@1.3.2:
     dependencies:
       is-arrayish: 0.2.1
-    dev: true
 
-  /es-abstract@1.22.3:
-    resolution: {integrity: sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==}
-    engines: {node: '>= 0.4'}
+  es-abstract@1.22.3:
     dependencies:
       array-buffer-byte-length: 1.0.0
       arraybuffer.prototype.slice: 1.0.2
@@ -7064,7 +11815,7 @@ packages:
       has-property-descriptors: 1.0.0
       has-proto: 1.0.1
       has-symbols: 1.0.3
-      hasown: 2.0.0
+      hasown: 2.0.2
       internal-slot: 1.0.6
       is-array-buffer: 3.0.2
       is-callable: 1.2.7
@@ -7081,7 +11832,7 @@ packages:
       safe-array-concat: 1.0.1
       safe-regex-test: 1.0.0
       string.prototype.trim: 1.2.8
-      string.prototype.trimend: 1.0.7
+      string.prototype.trimend: 1.0.8
       string.prototype.trimstart: 1.0.7
       typed-array-buffer: 1.0.0
       typed-array-byte-length: 1.0.0
@@ -7089,150 +11840,147 @@ packages:
       typed-array-length: 1.0.4
       unbox-primitive: 1.0.2
       which-typed-array: 1.1.13
-    dev: true
 
-  /es-module-lexer@1.4.1:
-    resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==}
+  es-abstract@1.23.3:
+    dependencies:
+      array-buffer-byte-length: 1.0.1
+      arraybuffer.prototype.slice: 1.0.3
+      available-typed-arrays: 1.0.7
+      call-bind: 1.0.7
+      data-view-buffer: 1.0.1
+      data-view-byte-length: 1.0.1
+      data-view-byte-offset: 1.0.0
+      es-define-property: 1.0.0
+      es-errors: 1.3.0
+      es-object-atoms: 1.0.0
+      es-set-tostringtag: 2.0.3
+      es-to-primitive: 1.2.1
+      function.prototype.name: 1.1.6
+      get-intrinsic: 1.2.4
+      get-symbol-description: 1.0.2
+      globalthis: 1.0.4
+      gopd: 1.0.1
+      has-property-descriptors: 1.0.2
+      has-proto: 1.0.3
+      has-symbols: 1.0.3
+      hasown: 2.0.2
+      internal-slot: 1.0.7
+      is-array-buffer: 3.0.4
+      is-callable: 1.2.7
+      is-data-view: 1.0.1
+      is-negative-zero: 2.0.3
+      is-regex: 1.1.4
+      is-shared-array-buffer: 1.0.3
+      is-string: 1.0.7
+      is-typed-array: 1.1.13
+      is-weakref: 1.0.2
+      object-inspect: 1.13.2
+      object-keys: 1.1.1
+      object.assign: 4.1.5
+      regexp.prototype.flags: 1.5.3
+      safe-array-concat: 1.1.2
+      safe-regex-test: 1.0.3
+      string.prototype.trim: 1.2.9
+      string.prototype.trimend: 1.0.8
+      string.prototype.trimstart: 1.0.8
+      typed-array-buffer: 1.0.2
+      typed-array-byte-length: 1.0.1
+      typed-array-byte-offset: 1.0.2
+      typed-array-length: 1.0.6
+      unbox-primitive: 1.0.2
+      which-typed-array: 1.1.15
 
-  /es-set-tostringtag@2.0.1:
-    resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==}
-    engines: {node: '>= 0.4'}
+  es-define-property@1.0.0:
+    dependencies:
+      get-intrinsic: 1.2.4
+
+  es-errors@1.3.0: {}
+
+  es-module-lexer@1.5.4: {}
+
+  es-object-atoms@1.0.0:
+    dependencies:
+      es-errors: 1.3.0
+
+  es-set-tostringtag@2.0.1:
     dependencies:
       get-intrinsic: 1.2.2
       has: 1.0.3
       has-tostringtag: 1.0.0
-    dev: true
 
-  /es-shim-unscopables@1.0.0:
-    resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==}
+  es-set-tostringtag@2.0.3:
+    dependencies:
+      get-intrinsic: 1.2.4
+      has-tostringtag: 1.0.2
+      hasown: 2.0.2
+
+  es-shim-unscopables@1.0.0:
     dependencies:
       has: 1.0.3
-    dev: true
 
-  /es-to-primitive@1.2.1:
-    resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
-    engines: {node: '>= 0.4'}
+  es-shim-unscopables@1.0.2:
+    dependencies:
+      hasown: 2.0.2
+
+  es-to-primitive@1.2.1:
     dependencies:
       is-callable: 1.2.7
       is-date-object: 1.0.5
       is-symbol: 1.0.4
-    dev: true
 
-  /esbuild@0.19.11:
-    resolution: {integrity: sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==}
-    engines: {node: '>=12'}
-    hasBin: true
-    requiresBuild: true
+  esast-util-from-estree@2.0.0:
+    dependencies:
+      '@types/estree-jsx': 1.0.5
+      devlop: 1.1.0
+      estree-util-visit: 2.0.0
+      unist-util-position-from-estree: 2.0.0
+
+  esast-util-from-js@2.0.1:
+    dependencies:
+      '@types/estree-jsx': 1.0.5
+      acorn: 8.13.0
+      esast-util-from-estree: 2.0.0
+      vfile-message: 4.0.2
+
+  esbuild@0.21.5:
     optionalDependencies:
-      '@esbuild/aix-ppc64': 0.19.11
-      '@esbuild/android-arm': 0.19.11
-      '@esbuild/android-arm64': 0.19.11
-      '@esbuild/android-x64': 0.19.11
-      '@esbuild/darwin-arm64': 0.19.11
-      '@esbuild/darwin-x64': 0.19.11
-      '@esbuild/freebsd-arm64': 0.19.11
-      '@esbuild/freebsd-x64': 0.19.11
-      '@esbuild/linux-arm': 0.19.11
-      '@esbuild/linux-arm64': 0.19.11
-      '@esbuild/linux-ia32': 0.19.11
-      '@esbuild/linux-loong64': 0.19.11
-      '@esbuild/linux-mips64el': 0.19.11
-      '@esbuild/linux-ppc64': 0.19.11
-      '@esbuild/linux-riscv64': 0.19.11
-      '@esbuild/linux-s390x': 0.19.11
-      '@esbuild/linux-x64': 0.19.11
-      '@esbuild/netbsd-x64': 0.19.11
-      '@esbuild/openbsd-x64': 0.19.11
-      '@esbuild/sunos-x64': 0.19.11
-      '@esbuild/win32-arm64': 0.19.11
-      '@esbuild/win32-ia32': 0.19.11
-      '@esbuild/win32-x64': 0.19.11
+      '@esbuild/aix-ppc64': 0.21.5
+      '@esbuild/android-arm': 0.21.5
+      '@esbuild/android-arm64': 0.21.5
+      '@esbuild/android-x64': 0.21.5
+      '@esbuild/darwin-arm64': 0.21.5
+      '@esbuild/darwin-x64': 0.21.5
+      '@esbuild/freebsd-arm64': 0.21.5
+      '@esbuild/freebsd-x64': 0.21.5
+      '@esbuild/linux-arm': 0.21.5
+      '@esbuild/linux-arm64': 0.21.5
+      '@esbuild/linux-ia32': 0.21.5
+      '@esbuild/linux-loong64': 0.21.5
+      '@esbuild/linux-mips64el': 0.21.5
+      '@esbuild/linux-ppc64': 0.21.5
+      '@esbuild/linux-riscv64': 0.21.5
+      '@esbuild/linux-s390x': 0.21.5
+      '@esbuild/linux-x64': 0.21.5
+      '@esbuild/netbsd-x64': 0.21.5
+      '@esbuild/openbsd-x64': 0.21.5
+      '@esbuild/sunos-x64': 0.21.5
+      '@esbuild/win32-arm64': 0.21.5
+      '@esbuild/win32-ia32': 0.21.5
+      '@esbuild/win32-x64': 0.21.5
 
-  /esbuild@0.19.5:
-    resolution: {integrity: sha512-bUxalY7b1g8vNhQKdB24QDmHeY4V4tw/s6Ak5z+jJX9laP5MoQseTOMemAr0gxssjNcH0MCViG8ONI2kksvfFQ==}
-    engines: {node: '>=12'}
-    hasBin: true
-    requiresBuild: true
-    optionalDependencies:
-      '@esbuild/android-arm': 0.19.5
-      '@esbuild/android-arm64': 0.19.5
-      '@esbuild/android-x64': 0.19.5
-      '@esbuild/darwin-arm64': 0.19.5
-      '@esbuild/darwin-x64': 0.19.5
-      '@esbuild/freebsd-arm64': 0.19.5
-      '@esbuild/freebsd-x64': 0.19.5
-      '@esbuild/linux-arm': 0.19.5
-      '@esbuild/linux-arm64': 0.19.5
-      '@esbuild/linux-ia32': 0.19.5
-      '@esbuild/linux-loong64': 0.19.5
-      '@esbuild/linux-mips64el': 0.19.5
-      '@esbuild/linux-ppc64': 0.19.5
-      '@esbuild/linux-riscv64': 0.19.5
-      '@esbuild/linux-s390x': 0.19.5
-      '@esbuild/linux-x64': 0.19.5
-      '@esbuild/netbsd-x64': 0.19.5
-      '@esbuild/openbsd-x64': 0.19.5
-      '@esbuild/sunos-x64': 0.19.5
-      '@esbuild/win32-arm64': 0.19.5
-      '@esbuild/win32-ia32': 0.19.5
-      '@esbuild/win32-x64': 0.19.5
-    dev: true
+  escalade@3.1.1: {}
 
-  /esbuild@0.20.2:
-    resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==}
-    engines: {node: '>=12'}
-    hasBin: true
-    requiresBuild: true
-    optionalDependencies:
-      '@esbuild/aix-ppc64': 0.20.2
-      '@esbuild/android-arm': 0.20.2
-      '@esbuild/android-arm64': 0.20.2
-      '@esbuild/android-x64': 0.20.2
-      '@esbuild/darwin-arm64': 0.20.2
-      '@esbuild/darwin-x64': 0.20.2
-      '@esbuild/freebsd-arm64': 0.20.2
-      '@esbuild/freebsd-x64': 0.20.2
-      '@esbuild/linux-arm': 0.20.2
-      '@esbuild/linux-arm64': 0.20.2
-      '@esbuild/linux-ia32': 0.20.2
-      '@esbuild/linux-loong64': 0.20.2
-      '@esbuild/linux-mips64el': 0.20.2
-      '@esbuild/linux-ppc64': 0.20.2
-      '@esbuild/linux-riscv64': 0.20.2
-      '@esbuild/linux-s390x': 0.20.2
-      '@esbuild/linux-x64': 0.20.2
-      '@esbuild/netbsd-x64': 0.20.2
-      '@esbuild/openbsd-x64': 0.20.2
-      '@esbuild/sunos-x64': 0.20.2
-      '@esbuild/win32-arm64': 0.20.2
-      '@esbuild/win32-ia32': 0.20.2
-      '@esbuild/win32-x64': 0.20.2
+  escalade@3.2.0: {}
 
-  /escalade@3.1.1:
-    resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
-    engines: {node: '>=6'}
+  escape-string-regexp@1.0.5: {}
 
-  /escape-string-regexp@1.0.5:
-    resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
-    engines: {node: '>=0.8.0'}
+  escape-string-regexp@2.0.0: {}
 
-  /escape-string-regexp@2.0.0:
-    resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
-    engines: {node: '>=8'}
-    dev: true
+  escape-string-regexp@4.0.0: {}
 
-  /escape-string-regexp@4.0.0:
-    resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
-    engines: {node: '>=10'}
+  escape-string-regexp@5.0.0: {}
 
-  /escape-string-regexp@5.0.0:
-    resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
-    engines: {node: '>=12'}
-
-  /escodegen@2.1.0:
-    resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==}
-    engines: {node: '>=6.0'}
-    hasBin: true
+  escodegen@2.1.0:
     dependencies:
       esprima: 4.0.1
       estraverse: 5.3.0
@@ -7240,166 +11988,109 @@ packages:
     optionalDependencies:
       source-map: 0.6.1
 
-  /eslint-import-resolver-node@0.3.9:
-    resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
+  eslint-import-resolver-node@0.3.9:
     dependencies:
       debug: 3.2.7
-      is-core-module: 2.13.1
+      is-core-module: 2.15.1
       resolve: 1.22.8
     transitivePeerDependencies:
       - supports-color
-    dev: true
 
-  /eslint-module-utils@2.8.0(eslint-import-resolver-node@0.3.9)(eslint@8.56.0):
-    resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==}
-    engines: {node: '>=4'}
-    peerDependencies:
-      '@typescript-eslint/parser': '*'
-      eslint: '*'
-      eslint-import-resolver-node: '*'
-      eslint-import-resolver-typescript: '*'
-      eslint-import-resolver-webpack: '*'
-    peerDependenciesMeta:
-      '@typescript-eslint/parser':
-        optional: true
-      eslint:
-        optional: true
-      eslint-import-resolver-node:
-        optional: true
-      eslint-import-resolver-typescript:
-        optional: true
-      eslint-import-resolver-webpack:
-        optional: true
+  eslint-module-utils@2.12.0(eslint-import-resolver-node@0.3.9)(eslint@8.57.1):
     dependencies:
       debug: 3.2.7
-      eslint: 8.56.0
+    optionalDependencies:
+      eslint: 8.57.1
       eslint-import-resolver-node: 0.3.9
     transitivePeerDependencies:
       - supports-color
-    dev: true
 
-  /eslint-plugin-es@4.1.0(eslint@8.56.0):
-    resolution: {integrity: sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==}
-    engines: {node: '>=8.10.0'}
-    peerDependencies:
-      eslint: '>=4.19.1'
+  eslint-plugin-es@4.1.0(eslint@9.13.0(jiti@1.21.0)):
     dependencies:
-      eslint: 8.56.0
+      eslint: 9.13.0(jiti@1.21.0)
       eslint-utils: 2.1.0
       regexpp: 3.2.0
-    dev: false
 
-  /eslint-plugin-import@2.29.1(eslint@8.56.0):
-    resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==}
-    engines: {node: '>=4'}
-    peerDependencies:
-      '@typescript-eslint/parser': '*'
-      eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8
-    peerDependenciesMeta:
-      '@typescript-eslint/parser':
-        optional: true
+  eslint-plugin-import@2.31.0(eslint@8.57.1):
     dependencies:
-      array-includes: 3.1.7
-      array.prototype.findlastindex: 1.2.3
+      '@rtsao/scc': 1.1.0
+      array-includes: 3.1.8
+      array.prototype.findlastindex: 1.2.5
       array.prototype.flat: 1.3.2
       array.prototype.flatmap: 1.3.2
       debug: 3.2.7
       doctrine: 2.1.0
-      eslint: 8.56.0
+      eslint: 8.57.1
       eslint-import-resolver-node: 0.3.9
-      eslint-module-utils: 2.8.0(eslint-import-resolver-node@0.3.9)(eslint@8.56.0)
-      hasown: 2.0.0
-      is-core-module: 2.13.1
+      eslint-module-utils: 2.12.0(eslint-import-resolver-node@0.3.9)(eslint@8.57.1)
+      hasown: 2.0.2
+      is-core-module: 2.15.1
       is-glob: 4.0.3
       minimatch: 3.1.2
-      object.fromentries: 2.0.7
-      object.groupby: 1.0.1
-      object.values: 1.1.7
+      object.fromentries: 2.0.8
+      object.groupby: 1.0.3
+      object.values: 1.2.0
       semver: 6.3.1
+      string.prototype.trimend: 1.0.8
       tsconfig-paths: 3.15.0
     transitivePeerDependencies:
       - eslint-import-resolver-typescript
       - eslint-import-resolver-webpack
       - supports-color
-    dev: true
 
-  /eslint-plugin-n@15.6.1(eslint@8.56.0):
-    resolution: {integrity: sha512-R9xw9OtCRxxaxaszTQmQAlPgM+RdGjaL1akWuY/Fv9fRAi8Wj4CUKc6iYVG8QNRjRuo8/BqVYIpfqberJUEacA==}
-    engines: {node: '>=12.22.0'}
-    peerDependencies:
-      eslint: '>=7.0.0'
+  eslint-plugin-n@15.6.1(eslint@9.13.0(jiti@1.21.0)):
     dependencies:
       builtins: 5.0.1
-      eslint: 8.56.0
-      eslint-plugin-es: 4.1.0(eslint@8.56.0)
-      eslint-utils: 3.0.0(eslint@8.56.0)
+      eslint: 9.13.0(jiti@1.21.0)
+      eslint-plugin-es: 4.1.0(eslint@9.13.0(jiti@1.21.0))
+      eslint-utils: 3.0.0(eslint@9.13.0(jiti@1.21.0))
       ignore: 5.2.4
-      is-core-module: 2.11.0
+      is-core-module: 2.15.1
       minimatch: 3.1.2
-      resolve: 1.22.2
-      semver: 7.3.8
-    dev: false
+      resolve: 1.22.8
+      semver: 7.6.3
 
-  /eslint-scope@7.2.2:
-    resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+  eslint-scope@7.2.2:
     dependencies:
       esrecurse: 4.3.0
       estraverse: 5.3.0
 
-  /eslint-utils@2.1.0:
-    resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==}
-    engines: {node: '>=6'}
+  eslint-scope@8.1.0:
+    dependencies:
+      esrecurse: 4.3.0
+      estraverse: 5.3.0
+
+  eslint-utils@2.1.0:
     dependencies:
       eslint-visitor-keys: 1.3.0
-    dev: false
 
-  /eslint-utils@3.0.0(eslint@8.56.0):
-    resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==}
-    engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0}
-    peerDependencies:
-      eslint: '>=5'
+  eslint-utils@3.0.0(eslint@9.13.0(jiti@1.21.0)):
     dependencies:
-      eslint: 8.56.0
+      eslint: 9.13.0(jiti@1.21.0)
       eslint-visitor-keys: 2.1.0
-    dev: false
 
-  /eslint-visitor-keys@1.3.0:
-    resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==}
-    engines: {node: '>=4'}
-    dev: false
+  eslint-visitor-keys@1.3.0: {}
 
-  /eslint-visitor-keys@2.1.0:
-    resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==}
-    engines: {node: '>=10'}
-    dev: false
+  eslint-visitor-keys@2.1.0: {}
 
-  /eslint-visitor-keys@3.4.0:
-    resolution: {integrity: sha512-HPpKPUBQcAsZOsHAFwTtIKcYlCje62XB7SEAcxjtmW6TD1WVpkS6i6/hOVtTZIl4zGj/mBqpFVGvaDneik+VoQ==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    dev: true
+  eslint-visitor-keys@3.4.3: {}
 
-  /eslint-visitor-keys@3.4.3:
-    resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+  eslint-visitor-keys@4.1.0: {}
 
-  /eslint@8.56.0:
-    resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-    hasBin: true
+  eslint@8.57.1:
     dependencies:
-      '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0)
-      '@eslint-community/regexpp': 4.10.0
+      '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1)
+      '@eslint-community/regexpp': 4.11.1
       '@eslint/eslintrc': 2.1.4
-      '@eslint/js': 8.56.0
-      '@humanwhocodes/config-array': 0.11.13
+      '@eslint/js': 8.57.1
+      '@humanwhocodes/config-array': 0.13.0
       '@humanwhocodes/module-importer': 1.0.1
       '@nodelib/fs.walk': 1.2.8
       '@ungap/structured-clone': 1.2.0
       ajv: 6.12.6
       chalk: 4.1.2
       cross-spawn: 7.0.3
-      debug: 4.3.4
+      debug: 4.3.7
       doctrine: 3.0.0
       escape-string-regexp: 4.0.0
       eslint-scope: 7.2.2
@@ -7411,7 +12102,7 @@ packages:
       file-entry-cache: 6.0.1
       find-up: 5.0.0
       glob-parent: 6.0.2
-      globals: 13.20.0
+      globals: 13.24.0
       graphemer: 1.4.0
       ignore: 5.2.4
       imurmurhash: 0.1.4
@@ -7429,105 +12120,120 @@ packages:
     transitivePeerDependencies:
       - supports-color
 
-  /espree@9.6.1:
-    resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
-    engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+  eslint@9.13.0(jiti@1.21.0):
     dependencies:
-      acorn: 8.11.3
-      acorn-jsx: 5.3.2(acorn@8.11.3)
+      '@eslint-community/eslint-utils': 4.4.0(eslint@9.13.0(jiti@1.21.0))
+      '@eslint-community/regexpp': 4.11.1
+      '@eslint/config-array': 0.18.0
+      '@eslint/core': 0.7.0
+      '@eslint/eslintrc': 3.1.0
+      '@eslint/js': 9.13.0
+      '@eslint/plugin-kit': 0.2.1
+      '@humanfs/node': 0.16.5
+      '@humanwhocodes/module-importer': 1.0.1
+      '@humanwhocodes/retry': 0.3.1
+      '@types/estree': 1.0.6
+      '@types/json-schema': 7.0.15
+      ajv: 6.12.6
+      chalk: 4.1.2
+      cross-spawn: 7.0.3
+      debug: 4.3.7
+      escape-string-regexp: 4.0.0
+      eslint-scope: 8.1.0
+      eslint-visitor-keys: 4.1.0
+      espree: 10.2.0
+      esquery: 1.5.0
+      esutils: 2.0.3
+      fast-deep-equal: 3.1.3
+      file-entry-cache: 8.0.0
+      find-up: 5.0.0
+      glob-parent: 6.0.2
+      ignore: 5.2.4
+      imurmurhash: 0.1.4
+      is-glob: 4.0.3
+      json-stable-stringify-without-jsonify: 1.0.1
+      lodash.merge: 4.6.2
+      minimatch: 3.1.2
+      natural-compare: 1.4.0
+      optionator: 0.9.3
+      text-table: 0.2.0
+    optionalDependencies:
+      jiti: 1.21.0
+    transitivePeerDependencies:
+      - supports-color
+
+  espree@10.2.0:
+    dependencies:
+      acorn: 8.13.0
+      acorn-jsx: 5.3.2(acorn@8.13.0)
+      eslint-visitor-keys: 4.1.0
+
+  espree@9.6.1:
+    dependencies:
+      acorn: 8.13.0
+      acorn-jsx: 5.3.2(acorn@8.13.0)
       eslint-visitor-keys: 3.4.3
 
-  /esprima@4.0.1:
-    resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
-    engines: {node: '>=4'}
-    hasBin: true
+  esprima@4.0.1: {}
 
-  /esquery@1.5.0:
-    resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==}
-    engines: {node: '>=0.10'}
+  esquery@1.5.0:
     dependencies:
       estraverse: 5.3.0
 
-  /esrecurse@4.3.0:
-    resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
-    engines: {node: '>=4.0'}
+  esrecurse@4.3.0:
     dependencies:
       estraverse: 5.3.0
 
-  /estraverse@5.3.0:
-    resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
-    engines: {node: '>=4.0'}
+  estraverse@5.3.0: {}
 
-  /estree-util-attach-comments@3.0.0:
-    resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==}
+  estree-util-attach-comments@3.0.0:
     dependencies:
-      '@types/estree': 1.0.0
-    dev: false
+      '@types/estree': 1.0.6
 
-  /estree-util-build-jsx@3.0.1:
-    resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==}
+  estree-util-build-jsx@3.0.1:
     dependencies:
-      '@types/estree-jsx': 1.0.0
+      '@types/estree-jsx': 1.0.5
       devlop: 1.1.0
       estree-util-is-identifier-name: 3.0.0
       estree-walker: 3.0.3
-    dev: false
 
-  /estree-util-is-identifier-name@3.0.0:
-    resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==}
-    dev: false
+  estree-util-is-identifier-name@3.0.0: {}
 
-  /estree-util-to-js@2.0.0:
-    resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==}
+  estree-util-scope@1.0.0:
     dependencies:
-      '@types/estree-jsx': 1.0.0
-      astring: 1.8.4
+      '@types/estree': 1.0.6
+      devlop: 1.1.0
+
+  estree-util-to-js@2.0.0:
+    dependencies:
+      '@types/estree-jsx': 1.0.5
+      astring: 1.9.0
       source-map: 0.7.4
-    dev: false
 
-  /estree-util-visit@2.0.0:
-    resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==}
+  estree-util-visit@2.0.0:
     dependencies:
-      '@types/estree-jsx': 1.0.0
-      '@types/unist': 3.0.1
-    dev: false
+      '@types/estree-jsx': 1.0.5
+      '@types/unist': 3.0.3
 
-  /estree-walker@1.0.1:
-    resolution: {integrity: sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==}
-    dev: true
+  estree-walker@1.0.1: {}
 
-  /estree-walker@2.0.2:
-    resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
-    dev: true
+  estree-walker@2.0.2: {}
 
-  /estree-walker@3.0.3:
-    resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
+  estree-walker@3.0.3:
     dependencies:
       '@types/estree': 1.0.0
 
-  /esutils@2.0.3:
-    resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
-    engines: {node: '>=0.10.0'}
+  esutils@2.0.3: {}
 
-  /eventemitter3@4.0.7:
-    resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
+  eventemitter3@4.0.7: {}
 
-  /eventemitter3@5.0.1:
-    resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+  eventemitter3@5.0.1: {}
 
-  /events@1.1.1:
-    resolution: {integrity: sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==}
-    engines: {node: '>=0.4.x'}
-    dev: false
+  events@1.1.1: {}
 
-  /events@3.3.0:
-    resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
-    engines: {node: '>=0.8.x'}
-    dev: true
+  events@3.3.0: {}
 
-  /execa@5.0.0:
-    resolution: {integrity: sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==}
-    engines: {node: '>=10'}
+  execa@5.0.0:
     dependencies:
       cross-spawn: 7.0.3
       get-stream: 6.0.1
@@ -7538,141 +12244,93 @@ packages:
       onetime: 5.1.2
       signal-exit: 3.0.7
       strip-final-newline: 2.0.0
-    dev: true
 
-  /execa@8.0.1:
-    resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
-    engines: {node: '>=16.17'}
-    dependencies:
-      cross-spawn: 7.0.3
-      get-stream: 8.0.1
-      human-signals: 5.0.0
-      is-stream: 3.0.0
-      merge-stream: 2.0.0
-      npm-run-path: 5.1.0
-      onetime: 6.0.0
-      signal-exit: 4.1.0
-      strip-final-newline: 3.0.0
+  expand-template@2.0.3: {}
 
-  /expand-template@2.0.3:
-    resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==}
-    engines: {node: '>=6'}
-    dev: true
+  exponential-backoff@3.1.1: {}
 
-  /exponential-backoff@3.1.1:
-    resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==}
-    dev: true
-
-  /extend-shallow@2.0.1:
-    resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==}
-    engines: {node: '>=0.10.0'}
+  extend-shallow@2.0.1:
     dependencies:
       is-extendable: 0.1.1
 
-  /extend@3.0.2:
-    resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==}
+  extend@3.0.2: {}
 
-  /external-editor@3.1.0:
-    resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
-    engines: {node: '>=4'}
+  external-editor@3.1.0:
     dependencies:
       chardet: 0.7.0
       iconv-lite: 0.4.24
       tmp: 0.0.33
-    dev: true
 
-  /fast-deep-equal@3.1.3:
-    resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+  fast-deep-equal@3.1.3: {}
 
-  /fast-glob@3.3.2:
-    resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
-    engines: {node: '>=8.6.0'}
+  fast-glob@3.3.2:
     dependencies:
       '@nodelib/fs.stat': 2.0.5
       '@nodelib/fs.walk': 1.2.8
       glob-parent: 5.1.2
       merge2: 1.4.1
-      micromatch: 4.0.5
+      micromatch: 4.0.8
 
-  /fast-json-stable-stringify@2.1.0:
-    resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+  fast-json-stable-stringify@2.1.0: {}
 
-  /fast-levenshtein@2.0.6:
-    resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+  fast-levenshtein@2.0.6: {}
 
-  /fast-unique-numbers@8.0.13:
-    resolution: {integrity: sha512-7OnTFAVPefgw2eBJ1xj2PGGR9FwYzSUso9decayHgCDX4sJkHLdcsYTytTg+tYv+wKF3U8gJuSBz2jJpQV4u/g==}
-    engines: {node: '>=16.1.0'}
+  fast-unique-numbers@8.0.13:
     dependencies:
-      '@babel/runtime': 7.24.1
-      tslib: 2.6.2
-    dev: false
+      '@babel/runtime': 7.25.7
+      tslib: 2.8.0
 
-  /fast-xml-parser@4.3.3:
-    resolution: {integrity: sha512-coV/D1MhrShMvU6D0I+VAK3umz6hUaxxhL0yp/9RjfiYUfAv14rDhGQL+PLForhMdr0wq3PiV07WtkkNjJjNHg==}
-    hasBin: true
+  fast-uri@3.0.3: {}
+
+  fast-xml-parser@4.5.0:
     dependencies:
       strnum: 1.0.5
-    dev: false
 
-  /fastq@1.15.0:
-    resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
+  fastq@1.15.0:
     dependencies:
       reusify: 1.0.4
 
-  /fetch-blob@3.2.0:
-    resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==}
-    engines: {node: ^12.20 || >= 14.13}
+  fdir@6.4.2(picomatch@4.0.2):
+    optionalDependencies:
+      picomatch: 4.0.2
+
+  fetch-blob@3.2.0:
     dependencies:
       node-domexception: 1.0.0
       web-streams-polyfill: 3.2.1
-    dev: true
 
-  /fflate@0.8.1:
-    resolution: {integrity: sha512-/exOvEuc+/iaUm105QIiOt4LpBdMTWsXxqR0HDF35vx3fmaKzw7354gTilCh5rkzEt8WYyG//ku3h3nRmd7CHQ==}
-    dev: true
+  fflate@0.8.2: {}
 
-  /fftjs@0.0.4:
-    resolution: {integrity: sha512-nIWxQyth1LVD6NH8a+YZUv+McjzbOY6dMe4wv6Pq5cGfP+c8Rd1T8Dsd50DCWlNgzSqA3y9lOkpD6dZD3qHa1A==}
+  fftjs@0.0.4:
     dependencies:
       babel-plugin-add-module-exports: 0.2.1
-    dev: false
 
-  /figures@3.2.0:
-    resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
-    engines: {node: '>=8'}
+  figures@3.2.0:
     dependencies:
       escape-string-regexp: 1.0.5
-    dev: true
 
-  /file-entry-cache@6.0.1:
-    resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
-    engines: {node: ^10.12.0 || >=12.0.0}
+  file-entry-cache@6.0.1:
     dependencies:
-      flat-cache: 3.0.4
+      flat-cache: 3.2.0
 
-  /file-set@4.0.2:
-    resolution: {integrity: sha512-fuxEgzk4L8waGXaAkd8cMr73Pm0FxOVkn8hztzUW7BAHhOGH90viQNXbiOsnecCWmfInqU6YmAMwxRMdKETceQ==}
-    engines: {node: '>=10'}
+  file-entry-cache@8.0.0:
+    dependencies:
+      flat-cache: 4.0.1
+
+  file-set@4.0.2:
     dependencies:
       array-back: 5.0.0
       glob: 7.2.3
-    dev: true
 
-  /filelist@1.0.4:
-    resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
+  filelist@1.0.4:
     dependencies:
       minimatch: 5.1.6
-    dev: true
 
-  /filing-cabinet@4.1.6:
-    resolution: {integrity: sha512-C+HZbuQTER36sKzGtUhrAPAoK6+/PrrUhYDBQEh3kBRdsyEhkLbp1ML8S0+6e6gCUrUlid+XmubxJrhvL2g/Zw==}
-    engines: {node: '>=14'}
-    hasBin: true
+  filing-cabinet@4.2.0:
     dependencies:
       app-module-path: 2.2.0
       commander: 10.0.1
-      enhanced-resolve: 5.15.0
+      enhanced-resolve: 5.17.1
       is-relative-path: 1.0.2
       module-definition: 5.0.1
       module-lookup-amd: 8.0.5
@@ -7681,398 +12339,234 @@ packages:
       sass-lookup: 5.0.1
       stylus-lookup: 5.0.1
       tsconfig-paths: 4.2.0
-      typescript: 5.3.3
-    dev: true
+      typescript: 5.6.3
 
-  /fill-range@7.0.1:
-    resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
-    engines: {node: '>=8'}
+  fill-range@7.0.1:
     dependencies:
       to-regex-range: 5.0.1
 
-  /find-replace@3.0.0:
-    resolution: {integrity: sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==}
-    engines: {node: '>=4.0.0'}
+  fill-range@7.1.1:
+    dependencies:
+      to-regex-range: 5.0.1
+
+  find-replace@3.0.0:
     dependencies:
       array-back: 3.1.0
-    dev: true
 
-  /find-up@2.1.0:
-    resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==}
-    engines: {node: '>=4'}
+  find-replace@5.0.2: {}
+
+  find-up-simple@1.0.0: {}
+
+  find-up@2.1.0:
     dependencies:
       locate-path: 2.0.0
-    dev: true
 
-  /find-up@4.1.0:
-    resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
-    engines: {node: '>=8'}
+  find-up@4.1.0:
     dependencies:
       locate-path: 5.0.0
       path-exists: 4.0.0
 
-  /find-up@5.0.0:
-    resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
-    engines: {node: '>=10'}
+  find-up@5.0.0:
     dependencies:
       locate-path: 6.0.0
       path-exists: 4.0.0
 
-  /find-yarn-workspace-root2@1.2.16:
-    resolution: {integrity: sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==}
+  find-yarn-workspace-root2@1.2.16:
     dependencies:
-      micromatch: 4.0.5
+      micromatch: 4.0.8
       pkg-dir: 4.2.0
 
-  /flat-cache@3.0.4:
-    resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==}
-    engines: {node: ^10.12.0 || >=12.0.0}
+  flat-cache@3.2.0:
     dependencies:
-      flatted: 3.2.9
+      flatted: 3.3.1
+      keyv: 4.5.4
       rimraf: 3.0.2
 
-  /flat@5.0.2:
-    resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==}
-    hasBin: true
-    dev: true
+  flat-cache@4.0.1:
+    dependencies:
+      flatted: 3.3.1
+      keyv: 4.5.4
 
-  /flatted@3.2.9:
-    resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==}
+  flat@5.0.2: {}
 
-  /flattie@1.1.0:
-    resolution: {integrity: sha512-xU99gDEnciIwJdGcBmNHnzTJ/w5AT+VFJOu6sTB6WM8diOYNA3Sa+K1DiEBQ7XH4QikQq3iFW1U+jRVcotQnBw==}
-    engines: {node: '>=8'}
+  flatted@3.3.1: {}
 
-  /follow-redirects@1.15.2:
-    resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==}
-    engines: {node: '>=4.0'}
-    peerDependencies:
-      debug: '*'
-    peerDependenciesMeta:
-      debug:
-        optional: true
-    dev: true
+  flattie@1.1.1: {}
 
-  /for-each@0.3.3:
-    resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
+  follow-redirects@1.15.2: {}
+
+  for-each@0.3.3:
     dependencies:
       is-callable: 1.2.7
-    dev: true
 
-  /foreground-child@3.1.1:
-    resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==}
-    engines: {node: '>=14'}
+  foreground-child@3.3.0:
     dependencies:
       cross-spawn: 7.0.3
       signal-exit: 4.1.0
-    dev: true
 
-  /form-data@4.0.0:
-    resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
-    engines: {node: '>= 6'}
+  form-data@4.0.0:
     dependencies:
       asynckit: 0.4.0
       combined-stream: 1.0.8
       mime-types: 2.1.35
-    dev: true
 
-  /formdata-polyfill@4.0.10:
-    resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==}
-    engines: {node: '>=12.20.0'}
+  formdata-polyfill@4.0.10:
     dependencies:
       fetch-blob: 3.2.0
-    dev: true
 
-  /fraction.js@4.3.7:
-    resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==}
-    dev: false
+  fraction.js@4.3.7: {}
 
-  /from2@2.3.0:
-    resolution: {integrity: sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==}
+  from2@2.3.0:
     dependencies:
       inherits: 2.0.4
       readable-stream: 2.3.7
-    dev: true
 
-  /fs-constants@1.0.0:
-    resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==}
-    dev: true
+  fs-constants@1.0.0: {}
 
-  /fs-extra@11.1.1:
-    resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==}
-    engines: {node: '>=14.14'}
+  fs-extra@11.2.0:
     dependencies:
       graceful-fs: 4.2.11
       jsonfile: 6.1.0
-      universalify: 2.0.0
-    dev: true
+      universalify: 2.0.1
 
-  /fs-extra@9.1.0:
-    resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==}
-    engines: {node: '>=10'}
+  fs-extra@9.1.0:
     dependencies:
       at-least-node: 1.0.0
       graceful-fs: 4.2.10
       jsonfile: 6.1.0
       universalify: 2.0.0
-    dev: true
 
-  /fs-minipass@2.1.0:
-    resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==}
-    engines: {node: '>= 8'}
+  fs-minipass@2.1.0:
     dependencies:
       minipass: 3.3.6
-    dev: true
 
-  /fs-minipass@3.0.2:
-    resolution: {integrity: sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+  fs-minipass@3.0.3:
     dependencies:
-      minipass: 5.0.0
-    dev: true
+      minipass: 7.1.2
 
-  /fs-then-native@2.0.0:
-    resolution: {integrity: sha512-X712jAOaWXkemQCAmWeg5rOT2i+KOpWz1Z/txk/cW0qlOu2oQ9H61vc5w3X/iyuUEfq/OyaFJ78/cZAQD1/bgA==}
-    engines: {node: '>=4.0.0'}
-    dev: true
+  fs-then-native@2.0.0: {}
 
-  /fs.realpath@1.0.0:
-    resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+  fs.realpath@1.0.0: {}
 
-  /fsevents@2.3.3:
-    resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
-    engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
-    os: [darwin]
-    requiresBuild: true
+  fsevents@2.3.3:
     optional: true
 
-  /function-bind@1.1.1:
-    resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
+  function-bind@1.1.2: {}
 
-  /function-bind@1.1.2:
-    resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
-
-  /function.prototype.name@1.1.6:
-    resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==}
-    engines: {node: '>= 0.4'}
+  function.prototype.name@1.1.6:
     dependencies:
       call-bind: 1.0.5
       define-properties: 1.2.1
       es-abstract: 1.22.3
       functions-have-names: 1.2.3
-    dev: true
 
-  /functions-have-names@1.2.3:
-    resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
-    dev: true
+  functions-have-names@1.2.3: {}
 
-  /gauge@4.0.4:
-    resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==}
-    engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
-    dependencies:
-      aproba: 2.0.0
-      color-support: 1.1.3
-      console-control-strings: 1.1.0
-      has-unicode: 2.0.1
-      signal-exit: 3.0.7
-      string-width: 4.2.3
-      strip-ansi: 6.0.1
-      wide-align: 1.1.5
-    dev: true
+  gensync@1.0.0-beta.2: {}
 
-  /gensync@1.0.0-beta.2:
-    resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
-    engines: {node: '>=6.9.0'}
-
-  /get-amd-module-type@5.0.1:
-    resolution: {integrity: sha512-jb65zDeHyDjFR1loOVk0HQGM5WNwoGB8aLWy3LKCieMKol0/ProHkhO2X1JxojuN10vbz1qNn09MJ7tNp7qMzw==}
-    engines: {node: '>=14'}
+  get-amd-module-type@5.0.1:
     dependencies:
       ast-module-types: 5.0.0
       node-source-walk: 6.0.2
-    dev: true
 
-  /get-caller-file@2.0.5:
-    resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
-    engines: {node: 6.* || 8.* || >= 10.*}
+  get-caller-file@2.0.5: {}
 
-  /get-east-asian-width@1.2.0:
-    resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==}
-    engines: {node: '>=18'}
+  get-east-asian-width@1.3.0: {}
 
-  /get-func-name@2.0.2:
-    resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
-    dev: true
-
-  /get-intrinsic@1.2.2:
-    resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==}
+  get-intrinsic@1.2.2:
     dependencies:
       function-bind: 1.1.2
       has-proto: 1.0.1
       has-symbols: 1.0.3
-      hasown: 2.0.0
-    dev: true
+      hasown: 2.0.2
 
-  /get-own-enumerable-property-symbols@3.0.2:
-    resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==}
-    dev: true
+  get-intrinsic@1.2.4:
+    dependencies:
+      es-errors: 1.3.0
+      function-bind: 1.1.2
+      has-proto: 1.0.3
+      has-symbols: 1.0.3
+      hasown: 2.0.2
 
-  /get-pkg-repo@4.2.1:
-    resolution: {integrity: sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==}
-    engines: {node: '>=6.9.0'}
-    hasBin: true
+  get-own-enumerable-property-symbols@3.0.2: {}
+
+  get-pkg-repo@4.2.1:
     dependencies:
       '@hutson/parse-repository-url': 3.0.2
       hosted-git-info: 4.1.0
       through2: 2.0.5
       yargs: 16.2.0
-    dev: true
 
-  /get-port@5.1.1:
-    resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==}
-    engines: {node: '>=8'}
-    dev: true
+  get-port@5.1.1: {}
 
-  /get-stdin@8.0.0:
-    resolution: {integrity: sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==}
-    engines: {node: '>=10'}
-    dev: false
+  get-stdin@8.0.0: {}
 
-  /get-stream@6.0.0:
-    resolution: {integrity: sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==}
-    engines: {node: '>=10'}
-    dev: true
+  get-stream@6.0.0: {}
 
-  /get-stream@6.0.1:
-    resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
-    engines: {node: '>=10'}
-    dev: true
+  get-stream@6.0.1: {}
 
-  /get-stream@8.0.1:
-    resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
-    engines: {node: '>=16'}
-
-  /get-symbol-description@1.0.0:
-    resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==}
-    engines: {node: '>= 0.4'}
+  get-symbol-description@1.0.0:
     dependencies:
       call-bind: 1.0.5
       get-intrinsic: 1.2.2
-    dev: true
 
-  /git-raw-commits@3.0.0:
-    resolution: {integrity: sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw==}
-    engines: {node: '>=14'}
-    hasBin: true
+  get-symbol-description@1.0.2:
+    dependencies:
+      call-bind: 1.0.7
+      es-errors: 1.3.0
+      get-intrinsic: 1.2.4
+
+  git-raw-commits@3.0.0:
     dependencies:
       dargs: 7.0.0
       meow: 8.1.2
       split2: 3.2.2
-    dev: true
 
-  /git-remote-origin-url@2.0.0:
-    resolution: {integrity: sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==}
-    engines: {node: '>=4'}
+  git-remote-origin-url@2.0.0:
     dependencies:
       gitconfiglocal: 1.0.0
       pify: 2.3.0
-    dev: true
 
-  /git-semver-tags@5.0.1:
-    resolution: {integrity: sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA==}
-    engines: {node: '>=14'}
-    hasBin: true
+  git-semver-tags@5.0.1:
     dependencies:
       meow: 8.1.2
-      semver: 7.5.4
-    dev: true
+      semver: 7.6.3
 
-  /git-up@7.0.0:
-    resolution: {integrity: sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==}
+  git-up@7.0.0:
     dependencies:
       is-ssh: 1.4.0
       parse-url: 8.1.0
-    dev: true
 
-  /git-url-parse@13.1.0:
-    resolution: {integrity: sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA==}
+  git-url-parse@14.0.0:
     dependencies:
       git-up: 7.0.0
-    dev: true
 
-  /gitconfiglocal@1.0.0:
-    resolution: {integrity: sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==}
+  gitconfiglocal@1.0.0:
     dependencies:
       ini: 1.3.8
-    dev: true
 
-  /github-from-package@0.0.0:
-    resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==}
-    dev: true
+  github-from-package@0.0.0: {}
 
-  /github-slugger@2.0.0:
-    resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==}
+  github-slugger@2.0.0: {}
 
-  /glob-parent@5.1.2:
-    resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
-    engines: {node: '>= 6'}
+  glob-parent@5.1.2:
     dependencies:
       is-glob: 4.0.3
 
-  /glob-parent@6.0.2:
-    resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
-    engines: {node: '>=10.13.0'}
+  glob-parent@6.0.2:
     dependencies:
       is-glob: 4.0.3
 
-  /glob@10.2.2:
-    resolution: {integrity: sha512-Xsa0BcxIC6th9UwNjZkhrMtNo/MnyRL8jGCP+uEwhA5oFOCY1f2s1/oNKY47xQ0Bg5nkjsfAEIej1VeH62bDDQ==}
-    engines: {node: '>=16 || 14 >=14.17'}
-    hasBin: true
+  glob@10.4.5:
     dependencies:
-      foreground-child: 3.1.1
-      jackspeak: 2.1.1
-      minimatch: 9.0.0
-      minipass: 5.0.0
-      path-scurry: 1.7.0
-    dev: true
+      foreground-child: 3.3.0
+      jackspeak: 3.4.3
+      minimatch: 9.0.5
+      minipass: 7.1.2
+      package-json-from-dist: 1.0.1
+      path-scurry: 1.11.1
 
-  /glob@10.3.10:
-    resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==}
-    engines: {node: '>=16 || 14 >=14.17'}
-    hasBin: true
-    dependencies:
-      foreground-child: 3.1.1
-      jackspeak: 2.3.6
-      minimatch: 9.0.3
-      minipass: 5.0.0
-      path-scurry: 1.10.1
-    dev: true
-
-  /glob@7.1.4:
-    resolution: {integrity: sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==}
-    dependencies:
-      fs.realpath: 1.0.0
-      inflight: 1.0.6
-      inherits: 2.0.4
-      minimatch: 3.1.2
-      once: 1.4.0
-      path-is-absolute: 1.0.1
-    dev: true
-
-  /glob@7.1.6:
-    resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==}
-    dependencies:
-      fs.realpath: 1.0.0
-      inflight: 1.0.6
-      inherits: 2.0.4
-      minimatch: 3.1.2
-      once: 1.4.0
-      path-is-absolute: 1.0.1
-    dev: false
-
-  /glob@7.2.3:
-    resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+  glob@7.1.4:
     dependencies:
       fs.realpath: 1.0.0
       inflight: 1.0.6
@@ -8081,47 +12575,49 @@ packages:
       once: 1.4.0
       path-is-absolute: 1.0.1
 
-  /glob@8.1.0:
-    resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==}
-    engines: {node: '>=12'}
+  glob@7.1.6:
     dependencies:
       fs.realpath: 1.0.0
       inflight: 1.0.6
       inherits: 2.0.4
-      minimatch: 5.1.6
+      minimatch: 3.1.2
       once: 1.4.0
-    dev: true
+      path-is-absolute: 1.0.1
 
-  /glob@9.3.5:
-    resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==}
-    engines: {node: '>=16 || 14 >=14.17'}
+  glob@7.2.3:
+    dependencies:
+      fs.realpath: 1.0.0
+      inflight: 1.0.6
+      inherits: 2.0.4
+      minimatch: 3.1.2
+      once: 1.4.0
+      path-is-absolute: 1.0.1
+
+  glob@9.3.5:
     dependencies:
       fs.realpath: 1.0.0
       minimatch: 8.0.4
       minipass: 4.2.8
       path-scurry: 1.7.0
-    dev: true
 
-  /globals@11.12.0:
-    resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
-    engines: {node: '>=4'}
+  globals@11.12.0: {}
 
-  /globals@13.20.0:
-    resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==}
-    engines: {node: '>=8'}
+  globals@13.24.0:
     dependencies:
       type-fest: 0.20.2
 
-  /globalthis@1.0.3:
-    resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==}
-    engines: {node: '>= 0.4'}
+  globals@14.0.0: {}
+
+  globalthis@1.0.3:
     dependencies:
       define-properties: 1.2.1
-    dev: true
 
-  /globby@11.1.0:
-    resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
-    engines: {node: '>=10'}
+  globalthis@1.0.4:
+    dependencies:
+      define-properties: 1.2.1
+      gopd: 1.0.1
+
+  globby@11.1.0:
     dependencies:
       array-union: 2.1.0
       dir-glob: 3.0.1
@@ -8129,531 +12625,354 @@ packages:
       ignore: 5.2.4
       merge2: 1.4.1
       slash: 3.0.0
-    dev: true
 
-  /gonzales-pe@4.3.0:
-    resolution: {integrity: sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==}
-    engines: {node: '>=0.6.0'}
-    hasBin: true
+  gonzales-pe@4.3.0:
     dependencies:
-      minimist: 1.2.7
-    dev: true
+      minimist: 1.2.8
 
-  /google-closure-compiler-java@20221102.0.1:
-    resolution: {integrity: sha512-rMKLEma3uSe/6MGHtivDezTv4u5iaDEyxoy9No+1WruPSZ5h1gBZLONcfCA8JaoGojFPdHZI1qbwT0EveEWnAg==}
-    dev: false
+  google-closure-compiler-java@20221102.0.1: {}
 
-  /google-closure-compiler-linux@20221102.0.1:
-    resolution: {integrity: sha512-rj1E1whT4j/giidQ44v4RoO8GcvU81VU9YB5RlRM0hWDvCGWjQasDABGnF/YLWLl5PXAAfJpa/hy8ckv5/r97g==}
-    cpu: [x32, x64]
-    os: [linux]
-    requiresBuild: true
-    dev: false
+  google-closure-compiler-linux@20221102.0.1:
     optional: true
 
-  /google-closure-compiler-osx@20221102.0.1:
-    resolution: {integrity: sha512-Cv993yr9a2DLFgYnsv4m6dNUk5jousd6W6la12x2fDbhxTLewYrw7CrCaVEVw1SU3XErVmdHOZQjFsVMhcZjCw==}
-    cpu: [x32, x64, arm64]
-    os: [darwin]
-    requiresBuild: true
-    dev: false
+  google-closure-compiler-osx@20221102.0.1:
     optional: true
 
-  /google-closure-compiler-windows@20221102.0.1:
-    resolution: {integrity: sha512-jRwHGekG/oDihHdKAEiYN5z0cBF+brL0bYtuEOXx4fAmq5tHe4OxKtSEEprCnVZZL0aG/boGprACPvsDRsXT7Q==}
-    cpu: [x32, x64]
-    os: [win32]
-    requiresBuild: true
-    dev: false
+  google-closure-compiler-windows@20221102.0.1:
     optional: true
 
-  /google-closure-compiler@20221102.0.1:
-    resolution: {integrity: sha512-edAlsyJEsy2I983xWBlBfdSme16uyY007HM2OwPOoWPEFgmR100ggUabJbIegXZgbSLH51kyeJMQKuWhiHgzcA==}
-    engines: {node: '>=10'}
-    hasBin: true
+  google-closure-compiler@20221102.0.1:
     dependencies:
       chalk: 4.1.2
       google-closure-compiler-java: 20221102.0.1
-      minimist: 1.2.7
+      minimist: 1.2.8
       vinyl: 2.2.1
       vinyl-sourcemaps-apply: 0.2.1
     optionalDependencies:
       google-closure-compiler-linux: 20221102.0.1
       google-closure-compiler-osx: 20221102.0.1
       google-closure-compiler-windows: 20221102.0.1
-    dev: false
 
-  /google-closure-library@20221102.0.0:
-    resolution: {integrity: sha512-M5+LWPS99tMB9dOGpZjLT9CdIYpnwBZiwB+dCmZFOOvwJiOWytntzJ/a/hoNF6zxD15l3GWwRJiEkL636D6DRQ==}
-    dev: false
+  google-closure-library@20221102.0.0: {}
 
-  /gopd@1.0.1:
-    resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
+  gopd@1.0.1:
     dependencies:
       get-intrinsic: 1.2.2
-    dev: true
 
-  /graceful-fs@4.2.10:
-    resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
+  graceful-fs@4.2.10: {}
 
-  /graceful-fs@4.2.11:
-    resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
-    dev: true
+  graceful-fs@4.2.11: {}
 
-  /graphemer@1.4.0:
-    resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
+  graphemer@1.4.0: {}
 
-  /gray-matter@4.0.3:
-    resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==}
-    engines: {node: '>=6.0'}
+  gray-matter@4.0.3:
     dependencies:
       js-yaml: 3.14.1
       kind-of: 6.0.3
       section-matter: 1.0.0
       strip-bom-string: 1.0.0
 
-  /handlebars@4.7.7:
-    resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==}
-    engines: {node: '>=0.4.7'}
-    hasBin: true
+  handlebars@4.7.8:
     dependencies:
-      minimist: 1.2.7
+      minimist: 1.2.8
       neo-async: 2.6.2
       source-map: 0.6.1
       wordwrap: 1.0.0
     optionalDependencies:
-      uglify-js: 3.17.4
-    dev: true
+      uglify-js: 3.19.3
 
-  /hard-rejection@2.1.0:
-    resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==}
-    engines: {node: '>=6'}
-    dev: true
+  hard-rejection@2.1.0: {}
 
-  /has-bigints@1.0.2:
-    resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
-    dev: true
+  has-bigints@1.0.2: {}
 
-  /has-flag@3.0.0:
-    resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
-    engines: {node: '>=4'}
+  has-flag@3.0.0: {}
 
-  /has-flag@4.0.0:
-    resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
-    engines: {node: '>=8'}
+  has-flag@4.0.0: {}
 
-  /has-property-descriptors@1.0.0:
-    resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==}
+  has-property-descriptors@1.0.0:
     dependencies:
-      get-intrinsic: 1.2.2
-    dev: true
+      get-intrinsic: 1.2.4
 
-  /has-proto@1.0.1:
-    resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==}
-    engines: {node: '>= 0.4'}
-    dev: true
+  has-property-descriptors@1.0.2:
+    dependencies:
+      es-define-property: 1.0.0
 
-  /has-symbols@1.0.3:
-    resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
-    engines: {node: '>= 0.4'}
-    dev: true
+  has-proto@1.0.1: {}
 
-  /has-tostringtag@1.0.0:
-    resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==}
-    engines: {node: '>= 0.4'}
+  has-proto@1.0.3: {}
+
+  has-symbols@1.0.3: {}
+
+  has-tostringtag@1.0.0:
     dependencies:
       has-symbols: 1.0.3
-    dev: true
 
-  /has-unicode@2.0.1:
-    resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==}
-    dev: true
-
-  /has@1.0.3:
-    resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
-    engines: {node: '>= 0.4.0'}
+  has-tostringtag@1.0.2:
     dependencies:
-      function-bind: 1.1.1
+      has-symbols: 1.0.3
 
-  /hasown@2.0.0:
-    resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==}
-    engines: {node: '>= 0.4'}
+  has-unicode@2.0.1: {}
+
+  has@1.0.3:
     dependencies:
       function-bind: 1.1.2
 
-  /hast-util-from-html@2.0.1:
-    resolution: {integrity: sha512-RXQBLMl9kjKVNkJTIO6bZyb2n+cUH8LFaSSzo82jiLT6Tfc+Pt7VQCS+/h3YwG4jaNE2TA2sdJisGWR+aJrp0g==}
+  hasown@2.0.2:
     dependencies:
-      '@types/hast': 3.0.2
+      function-bind: 1.1.2
+
+  hast-util-from-html@2.0.3:
+    dependencies:
+      '@types/hast': 3.0.4
       devlop: 1.1.0
       hast-util-from-parse5: 8.0.1
-      parse5: 7.1.2
-      vfile: 6.0.1
+      parse5: 7.2.0
+      vfile: 6.0.3
       vfile-message: 4.0.2
 
-  /hast-util-from-parse5@8.0.1:
-    resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==}
+  hast-util-from-parse5@8.0.1:
     dependencies:
-      '@types/hast': 3.0.2
-      '@types/unist': 3.0.1
+      '@types/hast': 3.0.4
+      '@types/unist': 3.0.3
       devlop: 1.1.0
       hastscript: 8.0.0
-      property-information: 6.2.0
-      vfile: 6.0.1
+      property-information: 6.5.0
+      vfile: 6.0.3
       vfile-location: 5.0.2
       web-namespaces: 2.0.1
 
-  /hast-util-has-property@1.0.4:
-    resolution: {integrity: sha512-ghHup2voGfgFoHMGnaLHOjbYFACKrRh9KFttdCzMCbFoBMJXiNi2+XTrPP8+q6cDJM/RSqlCfVWrjp1H201rZg==}
-    dev: false
+  hast-util-has-property@1.0.4: {}
 
-  /hast-util-heading-rank@3.0.0:
-    resolution: {integrity: sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==}
+  hast-util-heading-rank@3.0.0:
     dependencies:
-      '@types/hast': 3.0.2
-    dev: false
+      '@types/hast': 3.0.4
 
-  /hast-util-is-element@3.0.0:
-    resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==}
+  hast-util-is-element@3.0.0:
     dependencies:
-      '@types/hast': 3.0.2
-    dev: false
+      '@types/hast': 3.0.4
 
-  /hast-util-parse-selector@4.0.0:
-    resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==}
+  hast-util-parse-selector@4.0.0:
     dependencies:
-      '@types/hast': 3.0.2
+      '@types/hast': 3.0.4
 
-  /hast-util-raw@9.0.1:
-    resolution: {integrity: sha512-5m1gmba658Q+lO5uqL5YNGQWeh1MYWZbZmWrM5lncdcuiXuo5E2HT/CIOp0rLF8ksfSwiCVJ3twlgVRyTGThGA==}
+  hast-util-raw@9.0.1:
     dependencies:
-      '@types/hast': 3.0.2
-      '@types/unist': 3.0.1
+      '@types/hast': 3.0.4
+      '@types/unist': 3.0.3
       '@ungap/structured-clone': 1.2.0
       hast-util-from-parse5: 8.0.1
       hast-util-to-parse5: 8.0.0
       html-void-elements: 3.0.0
-      mdast-util-to-hast: 13.0.2
-      parse5: 7.1.2
+      mdast-util-to-hast: 13.2.0
+      parse5: 7.2.0
       unist-util-position: 5.0.0
       unist-util-visit: 5.0.0
-      vfile: 6.0.1
+      vfile: 6.0.3
       web-namespaces: 2.0.1
       zwitch: 2.0.4
 
-  /hast-util-to-estree@3.1.0:
-    resolution: {integrity: sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==}
+  hast-util-to-estree@3.1.0:
     dependencies:
-      '@types/estree': 1.0.0
-      '@types/estree-jsx': 1.0.0
-      '@types/hast': 3.0.2
+      '@types/estree': 1.0.6
+      '@types/estree-jsx': 1.0.5
+      '@types/hast': 3.0.4
       comma-separated-tokens: 2.0.3
       devlop: 1.1.0
       estree-util-attach-comments: 3.0.0
       estree-util-is-identifier-name: 3.0.0
       hast-util-whitespace: 3.0.0
-      mdast-util-mdx-expression: 2.0.0
-      mdast-util-mdx-jsx: 3.0.0
+      mdast-util-mdx-expression: 2.0.1
+      mdast-util-mdx-jsx: 3.1.3
       mdast-util-mdxjs-esm: 2.0.1
-      property-information: 6.2.0
+      property-information: 6.5.0
       space-separated-tokens: 2.0.2
-      style-to-object: 0.4.1
+      style-to-object: 0.4.4
       unist-util-position: 5.0.0
       zwitch: 2.0.4
     transitivePeerDependencies:
       - supports-color
-    dev: false
 
-  /hast-util-to-html@9.0.0:
-    resolution: {integrity: sha512-IVGhNgg7vANuUA2XKrT6sOIIPgaYZnmLx3l/CCOAK0PtgfoHrZwX7jCSYyFxHTrGmC6S9q8aQQekjp4JPZF+cw==}
+  hast-util-to-html@9.0.3:
     dependencies:
-      '@types/hast': 3.0.2
-      '@types/unist': 3.0.1
+      '@types/hast': 3.0.4
+      '@types/unist': 3.0.3
       ccount: 2.0.1
       comma-separated-tokens: 2.0.3
-      hast-util-raw: 9.0.1
       hast-util-whitespace: 3.0.0
       html-void-elements: 3.0.0
-      mdast-util-to-hast: 13.0.2
-      property-information: 6.2.0
+      mdast-util-to-hast: 13.2.0
+      property-information: 6.5.0
       space-separated-tokens: 2.0.2
-      stringify-entities: 4.0.3
+      stringify-entities: 4.0.4
       zwitch: 2.0.4
 
-  /hast-util-to-jsx-runtime@2.3.0:
-    resolution: {integrity: sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==}
+  hast-util-to-jsx-runtime@2.3.2:
     dependencies:
-      '@types/estree': 1.0.0
-      '@types/hast': 3.0.2
-      '@types/unist': 3.0.1
+      '@types/estree': 1.0.6
+      '@types/hast': 3.0.4
+      '@types/unist': 3.0.3
       comma-separated-tokens: 2.0.3
       devlop: 1.1.0
       estree-util-is-identifier-name: 3.0.0
       hast-util-whitespace: 3.0.0
-      mdast-util-mdx-expression: 2.0.0
-      mdast-util-mdx-jsx: 3.0.0
+      mdast-util-mdx-expression: 2.0.1
+      mdast-util-mdx-jsx: 3.1.3
       mdast-util-mdxjs-esm: 2.0.1
-      property-information: 6.2.0
+      property-information: 6.5.0
       space-separated-tokens: 2.0.2
-      style-to-object: 1.0.5
+      style-to-object: 1.0.8
       unist-util-position: 5.0.0
       vfile-message: 4.0.2
     transitivePeerDependencies:
       - supports-color
-    dev: false
 
-  /hast-util-to-parse5@8.0.0:
-    resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==}
+  hast-util-to-parse5@8.0.0:
     dependencies:
-      '@types/hast': 3.0.2
+      '@types/hast': 3.0.4
       comma-separated-tokens: 2.0.3
       devlop: 1.1.0
-      property-information: 6.2.0
+      property-information: 6.5.0
       space-separated-tokens: 2.0.2
       web-namespaces: 2.0.1
       zwitch: 2.0.4
 
-  /hast-util-to-string@3.0.0:
-    resolution: {integrity: sha512-OGkAxX1Ua3cbcW6EJ5pT/tslVb90uViVkcJ4ZZIMW/R33DX/AkcJcRrPebPwJkHYwlDHXz4aIwvAAaAdtrACFA==}
+  hast-util-to-string@3.0.0:
     dependencies:
-      '@types/hast': 3.0.2
-    dev: false
+      '@types/hast': 3.0.4
 
-  /hast-util-to-text@4.0.0:
-    resolution: {integrity: sha512-EWiE1FSArNBPUo1cKWtzqgnuRQwEeQbQtnFJRYV1hb1BWDgrAlBU0ExptvZMM/KSA82cDpm2sFGf3Dmc5Mza3w==}
+  hast-util-to-text@4.0.2:
     dependencies:
-      '@types/hast': 3.0.2
-      '@types/unist': 3.0.1
+      '@types/hast': 3.0.4
+      '@types/unist': 3.0.3
       hast-util-is-element: 3.0.0
       unist-util-find-after: 5.0.0
-    dev: false
 
-  /hast-util-whitespace@3.0.0:
-    resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
+  hast-util-whitespace@3.0.0:
     dependencies:
-      '@types/hast': 3.0.2
+      '@types/hast': 3.0.4
 
-  /hastscript@8.0.0:
-    resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==}
+  hastscript@8.0.0:
     dependencies:
-      '@types/hast': 3.0.2
+      '@types/hast': 3.0.4
       comma-separated-tokens: 2.0.3
       hast-util-parse-selector: 4.0.0
-      property-information: 6.2.0
+      property-information: 6.5.0
       space-separated-tokens: 2.0.2
 
-  /hosted-git-info@2.8.9:
-    resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
-    dev: true
+  hosted-git-info@2.8.9: {}
 
-  /hosted-git-info@3.0.8:
-    resolution: {integrity: sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==}
-    engines: {node: '>=10'}
+  hosted-git-info@4.1.0:
     dependencies:
       lru-cache: 6.0.0
-    dev: true
 
-  /hosted-git-info@4.1.0:
-    resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==}
-    engines: {node: '>=10'}
+  hosted-git-info@7.0.2:
     dependencies:
-      lru-cache: 6.0.0
-    dev: true
+      lru-cache: 10.4.3
 
-  /hosted-git-info@6.1.1:
-    resolution: {integrity: sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+  hs2js@0.0.8:
     dependencies:
-      lru-cache: 7.18.3
-    dev: true
+      web-tree-sitter: 0.20.8
 
-  /hosted-git-info@7.0.1:
-    resolution: {integrity: sha512-+K84LB1DYwMHoHSgaOY/Jfhw3ucPmSET5v98Ke/HdNSw4a0UktWzyW1mjhjpuxxTqOOsfWT/7iVshHmVZ4IpOA==}
-    engines: {node: ^16.14.0 || >=18.0.0}
+  html-escaper@3.0.3: {}
+
+  html-void-elements@3.0.0: {}
+
+  http-cache-semantics@4.1.1: {}
+
+  http-proxy-agent@7.0.2:
     dependencies:
-      lru-cache: 10.1.0
-    dev: true
-
-  /html-escaper@3.0.3:
-    resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==}
-
-  /html-void-elements@3.0.0:
-    resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
-
-  /http-cache-semantics@4.1.1:
-    resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==}
-
-  /http-proxy-agent@5.0.0:
-    resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==}
-    engines: {node: '>= 6'}
-    dependencies:
-      '@tootallnate/once': 2.0.0
-      agent-base: 6.0.2
-      debug: 4.3.4
+      agent-base: 7.1.1
+      debug: 4.3.7
     transitivePeerDependencies:
       - supports-color
-    dev: true
 
-  /http-proxy-agent@7.0.0:
-    resolution: {integrity: sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==}
-    engines: {node: '>= 14'}
-    dependencies:
-      agent-base: 7.1.0
-      debug: 4.3.4
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  /https-proxy-agent@5.0.1:
-    resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
-    engines: {node: '>= 6'}
+  https-proxy-agent@5.0.1:
     dependencies:
       agent-base: 6.0.2
-      debug: 4.3.4
+      debug: 4.3.7
     transitivePeerDependencies:
       - supports-color
-    dev: true
 
-  /https-proxy-agent@7.0.2:
-    resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==}
-    engines: {node: '>= 14'}
+  https-proxy-agent@7.0.5:
     dependencies:
-      agent-base: 7.1.0
-      debug: 4.3.4
+      agent-base: 7.1.1
+      debug: 4.3.7
     transitivePeerDependencies:
       - supports-color
-    dev: true
 
-  /human-signals@2.1.0:
-    resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
-    engines: {node: '>=10.17.0'}
-    dev: true
+  human-signals@2.1.0: {}
 
-  /human-signals@5.0.0:
-    resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
-    engines: {node: '>=16.17.0'}
-
-  /humanize-ms@1.2.1:
-    resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==}
-    dependencies:
-      ms: 2.1.3
-    dev: true
-
-  /hydra-synth@1.3.29:
-    resolution: {integrity: sha512-KK1wMGpo9AuVivvD9SP7ukPS7T/rMaYA7XMlnRF3oFbTw9u4l4aVTyexG+KmCd5XDD/4GulR1jVzySZlAuGPCw==}
+  hydra-synth@1.3.29:
     dependencies:
       meyda: 5.6.2
       raf-loop: 1.1.3
       regl: 1.7.0
     transitivePeerDependencies:
       - supports-color
-    dev: false
 
-  /iconv-lite@0.4.24:
-    resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
-    engines: {node: '>=0.10.0'}
+  iconv-lite@0.4.24:
     dependencies:
       safer-buffer: 2.1.2
 
-  /iconv-lite@0.6.3:
-    resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
-    engines: {node: '>=0.10.0'}
-    requiresBuild: true
+  iconv-lite@0.6.3:
     dependencies:
       safer-buffer: 2.1.2
-    dev: true
     optional: true
 
-  /idb@7.1.1:
-    resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==}
-    dev: true
+  idb@7.1.1: {}
 
-  /ieee754@1.2.1:
-    resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+  ieee754@1.2.1: {}
 
-  /ignore-walk@5.0.1:
-    resolution: {integrity: sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==}
-    engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+  ignore-walk@6.0.5:
     dependencies:
-      minimatch: 5.1.6
-    dev: true
+      minimatch: 9.0.5
 
-  /ignore-walk@6.0.4:
-    resolution: {integrity: sha512-t7sv42WkwFkyKbivUCglsQW5YWMskWtbEf4MNKX5u/CCWHKSPzN4FtBQGsQZgCLbxOzpVlcbWVK5KB3auIOjSw==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
-    dependencies:
-      minimatch: 9.0.0
-    dev: true
+  ignore@5.2.4: {}
 
-  /ignore@5.2.4:
-    resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
-    engines: {node: '>= 4'}
-
-  /import-fresh@3.3.0:
-    resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
-    engines: {node: '>=6'}
+  import-fresh@3.3.0:
     dependencies:
       parent-module: 1.0.1
       resolve-from: 4.0.0
 
-  /import-local@3.1.0:
-    resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==}
-    engines: {node: '>=8'}
-    hasBin: true
+  import-local@3.1.0:
     dependencies:
       pkg-dir: 4.2.0
       resolve-cwd: 3.0.0
-    dev: true
 
-  /import-meta-resolve@4.0.0:
-    resolution: {integrity: sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==}
+  import-meta-resolve@4.1.0: {}
 
-  /imurmurhash@0.1.4:
-    resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
-    engines: {node: '>=0.8.19'}
+  imurmurhash@0.1.4: {}
 
-  /indent-string@4.0.0:
-    resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
-    engines: {node: '>=8'}
-    dev: true
+  indent-string@4.0.0: {}
 
-  /inflight@1.0.6:
-    resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+  inflight@1.0.6:
     dependencies:
       once: 1.4.0
       wrappy: 1.0.2
 
-  /inherits@2.0.4:
-    resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+  inherits@2.0.4: {}
 
-  /ini@1.3.8:
-    resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
-    dev: true
+  ini@1.3.8: {}
 
-  /init-package-json@5.0.0:
-    resolution: {integrity: sha512-kBhlSheBfYmq3e0L1ii+VKe3zBTLL5lDCDWR+f9dLmEGSB3MqLlMlsolubSsyI88Bg6EA+BIMlomAnQ1SwgQBw==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+  ini@4.1.3: {}
+
+  init-package-json@6.0.3:
     dependencies:
-      npm-package-arg: 10.1.0
-      promzard: 1.0.0
-      read: 2.1.0
-      read-package-json: 6.0.4
-      semver: 7.5.4
+      '@npmcli/package-json': 5.2.0
+      npm-package-arg: 11.0.2
+      promzard: 1.0.2
+      read: 3.0.1
+      semver: 7.6.3
       validate-npm-package-license: 3.0.4
-      validate-npm-package-name: 5.0.0
-    dev: true
+      validate-npm-package-name: 5.0.1
+    transitivePeerDependencies:
+      - bluebird
 
-  /inline-style-parser@0.1.1:
-    resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==}
-    dev: false
+  inline-style-parser@0.1.1: {}
 
-  /inline-style-parser@0.2.2:
-    resolution: {integrity: sha512-EcKzdTHVe8wFVOGEYXiW9WmJXPjqi1T+234YpJr98RiFYKHV3cdy1+3mkTE+KHTHxFFLH51SfaGOoUdW+v7ViQ==}
-    dev: false
+  inline-style-parser@0.2.4: {}
 
-  /inquirer@8.2.5:
-    resolution: {integrity: sha512-QAgPDQMEgrDssk1XiwwHoOGYF9BAbUcc1+j+FhEvaOt8/cKRqyLn0U5qA6F74fGhTMGxf92pOvPBeh29jQJDTQ==}
-    engines: {node: '>=12.0.0'}
+  inquirer@8.2.5:
     dependencies:
       ansi-escapes: 4.3.2
       chalk: 4.1.2
@@ -8670,692 +12989,450 @@ packages:
       strip-ansi: 6.0.1
       through: 2.3.8
       wrap-ansi: 7.0.0
-    dev: true
 
-  /internal-slot@1.0.6:
-    resolution: {integrity: sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==}
-    engines: {node: '>= 0.4'}
+  internal-slot@1.0.6:
     dependencies:
       get-intrinsic: 1.2.2
-      hasown: 2.0.0
+      hasown: 2.0.2
       side-channel: 1.0.4
-    dev: true
 
-  /into-stream@6.0.0:
-    resolution: {integrity: sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA==}
-    engines: {node: '>=10'}
+  internal-slot@1.0.7:
+    dependencies:
+      es-errors: 1.3.0
+      hasown: 2.0.2
+      side-channel: 1.0.6
+
+  into-stream@6.0.0:
     dependencies:
       from2: 2.3.0
       p-is-promise: 3.0.0
-    dev: true
 
-  /ip@2.0.0:
-    resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==}
-    dev: true
+  ip-address@9.0.5:
+    dependencies:
+      jsbn: 1.1.0
+      sprintf-js: 1.1.3
 
-  /is-alphabetical@2.0.1:
-    resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==}
-    dev: false
+  is-alphabetical@2.0.1: {}
 
-  /is-alphanumerical@2.0.1:
-    resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==}
+  is-alphanumerical@2.0.1:
     dependencies:
       is-alphabetical: 2.0.1
       is-decimal: 2.0.1
-    dev: false
 
-  /is-array-buffer@3.0.2:
-    resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==}
+  is-array-buffer@3.0.2:
     dependencies:
       call-bind: 1.0.5
       get-intrinsic: 1.2.2
       is-typed-array: 1.1.12
-    dev: true
 
-  /is-arrayish@0.2.1:
-    resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
-    dev: true
+  is-array-buffer@3.0.4:
+    dependencies:
+      call-bind: 1.0.7
+      get-intrinsic: 1.2.4
 
-  /is-arrayish@0.3.2:
-    resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
+  is-arrayish@0.2.1: {}
 
-  /is-bigint@1.0.4:
-    resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
+  is-arrayish@0.3.2: {}
+
+  is-bigint@1.0.4:
     dependencies:
       has-bigints: 1.0.2
-    dev: true
 
-  /is-binary-path@2.1.0:
-    resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
-    engines: {node: '>=8'}
+  is-binary-path@2.1.0:
     dependencies:
       binary-extensions: 2.2.0
 
-  /is-boolean-object@1.1.2:
-    resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
-    engines: {node: '>= 0.4'}
+  is-boolean-object@1.1.2:
     dependencies:
       call-bind: 1.0.5
-      has-tostringtag: 1.0.0
-    dev: true
+      has-tostringtag: 1.0.2
 
-  /is-buffer@2.0.5:
-    resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==}
-    engines: {node: '>=4'}
+  is-buffer@2.0.5: {}
 
-  /is-callable@1.2.7:
-    resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
-    engines: {node: '>= 0.4'}
-    dev: true
+  is-callable@1.2.7: {}
 
-  /is-ci@3.0.1:
-    resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==}
-    hasBin: true
+  is-ci@3.0.1:
     dependencies:
       ci-info: 3.9.0
-    dev: true
 
-  /is-core-module@2.11.0:
-    resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==}
+  is-core-module@2.15.1:
+    dependencies:
+      hasown: 2.0.2
+
+  is-core-module@2.9.0:
     dependencies:
       has: 1.0.3
 
-  /is-core-module@2.13.1:
-    resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
+  is-data-view@1.0.1:
     dependencies:
-      hasown: 2.0.0
+      is-typed-array: 1.1.13
 
-  /is-core-module@2.9.0:
-    resolution: {integrity: sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==}
+  is-date-object@1.0.5:
     dependencies:
-      has: 1.0.3
-    dev: true
+      has-tostringtag: 1.0.2
 
-  /is-date-object@1.0.5:
-    resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
-    engines: {node: '>= 0.4'}
-    dependencies:
-      has-tostringtag: 1.0.0
-    dev: true
+  is-decimal@2.0.1: {}
 
-  /is-decimal@2.0.1:
-    resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==}
-    dev: false
+  is-docker@2.2.1: {}
 
-  /is-docker@2.2.1:
-    resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
-    engines: {node: '>=8'}
-    hasBin: true
-    dev: true
+  is-docker@3.0.0: {}
 
-  /is-docker@3.0.0:
-    resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-    hasBin: true
+  is-extendable@0.1.1: {}
 
-  /is-extendable@0.1.1:
-    resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==}
-    engines: {node: '>=0.10.0'}
+  is-extglob@2.1.1: {}
 
-  /is-extglob@2.1.1:
-    resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
-    engines: {node: '>=0.10.0'}
+  is-fullwidth-code-point@2.0.0: {}
 
-  /is-fullwidth-code-point@2.0.0:
-    resolution: {integrity: sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==}
-    engines: {node: '>=4'}
-    dev: false
+  is-fullwidth-code-point@3.0.0: {}
 
-  /is-fullwidth-code-point@3.0.0:
-    resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
-    engines: {node: '>=8'}
-
-  /is-glob@4.0.3:
-    resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
-    engines: {node: '>=0.10.0'}
+  is-glob@4.0.3:
     dependencies:
       is-extglob: 2.1.1
 
-  /is-hexadecimal@2.0.1:
-    resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==}
-    dev: false
+  is-hexadecimal@2.0.1: {}
 
-  /is-inside-container@1.0.0:
-    resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
-    engines: {node: '>=14.16'}
-    hasBin: true
+  is-inside-container@1.0.0:
     dependencies:
       is-docker: 3.0.0
 
-  /is-interactive@1.0.0:
-    resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
-    engines: {node: '>=8'}
-    dev: true
+  is-interactive@1.0.0: {}
 
-  /is-interactive@2.0.0:
-    resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==}
-    engines: {node: '>=12'}
+  is-interactive@2.0.0: {}
 
-  /is-lambda@1.0.1:
-    resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==}
-    dev: true
+  is-lambda@1.0.1: {}
 
-  /is-module@1.0.0:
-    resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
-    dev: true
+  is-module@1.0.0: {}
 
-  /is-negative-zero@2.0.2:
-    resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==}
-    engines: {node: '>= 0.4'}
-    dev: true
+  is-negative-zero@2.0.2: {}
 
-  /is-number-object@1.0.7:
-    resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
-    engines: {node: '>= 0.4'}
+  is-negative-zero@2.0.3: {}
+
+  is-number-object@1.0.7:
     dependencies:
-      has-tostringtag: 1.0.0
-    dev: true
+      has-tostringtag: 1.0.2
 
-  /is-number@7.0.0:
-    resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
-    engines: {node: '>=0.12.0'}
+  is-number@7.0.0: {}
 
-  /is-obj@1.0.1:
-    resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==}
-    engines: {node: '>=0.10.0'}
-    dev: true
+  is-obj@1.0.1: {}
 
-  /is-obj@2.0.0:
-    resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
-    engines: {node: '>=8'}
-    dev: true
+  is-obj@2.0.0: {}
 
-  /is-path-inside@3.0.3:
-    resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
-    engines: {node: '>=8'}
+  is-path-inside@3.0.3: {}
 
-  /is-plain-obj@1.1.0:
-    resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==}
-    engines: {node: '>=0.10.0'}
-    dev: true
+  is-plain-obj@1.1.0: {}
 
-  /is-plain-obj@4.1.0:
-    resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
-    engines: {node: '>=12'}
+  is-plain-obj@4.1.0: {}
 
-  /is-plain-object@2.0.4:
-    resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
-    engines: {node: '>=0.10.0'}
+  is-plain-object@2.0.4:
     dependencies:
       isobject: 3.0.1
-    dev: true
 
-  /is-plain-object@5.0.0:
-    resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
-    engines: {node: '>=0.10.0'}
-    dev: true
+  is-plain-object@5.0.0: {}
 
-  /is-reference@3.0.1:
-    resolution: {integrity: sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==}
-    dependencies:
-      '@types/estree': 1.0.0
-    dev: false
-
-  /is-regex@1.1.4:
-    resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
-    engines: {node: '>= 0.4'}
+  is-regex@1.1.4:
     dependencies:
       call-bind: 1.0.5
       has-tostringtag: 1.0.0
-    dev: true
 
-  /is-regexp@1.0.0:
-    resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==}
-    engines: {node: '>=0.10.0'}
-    dev: true
+  is-regexp@1.0.0: {}
 
-  /is-relative-path@1.0.2:
-    resolution: {integrity: sha512-i1h+y50g+0hRbBD+dbnInl3JlJ702aar58snAeX+MxBAPvzXGej7sYoPMhlnykabt0ZzCJNBEyzMlekuQZN7fA==}
-    dev: true
+  is-relative-path@1.0.2: {}
 
-  /is-shared-array-buffer@1.0.2:
-    resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==}
+  is-shared-array-buffer@1.0.2:
     dependencies:
       call-bind: 1.0.5
-    dev: true
 
-  /is-ssh@1.4.0:
-    resolution: {integrity: sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==}
+  is-shared-array-buffer@1.0.3:
+    dependencies:
+      call-bind: 1.0.7
+
+  is-ssh@1.4.0:
     dependencies:
       protocols: 2.0.1
-    dev: true
 
-  /is-stream@2.0.0:
-    resolution: {integrity: sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==}
-    engines: {node: '>=8'}
-    dev: true
+  is-stream@2.0.0: {}
 
-  /is-stream@2.0.1:
-    resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
-    engines: {node: '>=8'}
-    dev: true
+  is-stream@2.0.1: {}
 
-  /is-stream@3.0.0:
-    resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
-  /is-string@1.0.7:
-    resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
-    engines: {node: '>= 0.4'}
+  is-string@1.0.7:
     dependencies:
-      has-tostringtag: 1.0.0
-    dev: true
+      has-tostringtag: 1.0.2
 
-  /is-symbol@1.0.4:
-    resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
-    engines: {node: '>= 0.4'}
+  is-symbol@1.0.4:
     dependencies:
       has-symbols: 1.0.3
-    dev: true
 
-  /is-text-path@1.0.1:
-    resolution: {integrity: sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==}
-    engines: {node: '>=0.10.0'}
+  is-text-path@1.0.1:
     dependencies:
       text-extensions: 1.9.0
-    dev: true
 
-  /is-typed-array@1.1.12:
-    resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==}
-    engines: {node: '>= 0.4'}
+  is-typed-array@1.1.12:
     dependencies:
       which-typed-array: 1.1.13
-    dev: true
 
-  /is-unicode-supported@0.1.0:
-    resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==}
-    engines: {node: '>=10'}
-    dev: true
+  is-typed-array@1.1.13:
+    dependencies:
+      which-typed-array: 1.1.15
 
-  /is-unicode-supported@1.3.0:
-    resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==}
-    engines: {node: '>=12'}
+  is-unicode-supported@0.1.0: {}
 
-  /is-url-superb@4.0.0:
-    resolution: {integrity: sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==}
-    engines: {node: '>=10'}
-    dev: true
+  is-unicode-supported@1.3.0: {}
 
-  /is-url@1.2.4:
-    resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==}
-    dev: true
+  is-unicode-supported@2.1.0: {}
 
-  /is-weakref@1.0.2:
-    resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
+  is-url-superb@4.0.0: {}
+
+  is-url@1.2.4: {}
+
+  is-weakref@1.0.2:
     dependencies:
       call-bind: 1.0.5
-    dev: true
 
-  /is-wsl@2.2.0:
-    resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
-    engines: {node: '>=8'}
+  is-wsl@2.2.0:
     dependencies:
       is-docker: 2.2.1
-    dev: true
 
-  /is-wsl@3.1.0:
-    resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==}
-    engines: {node: '>=16'}
+  is-wsl@3.1.0:
     dependencies:
       is-inside-container: 1.0.0
 
-  /isarray@0.0.1:
-    resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==}
-    dev: false
+  isarray@0.0.1: {}
 
-  /isarray@1.0.0:
-    resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
+  isarray@1.0.0: {}
 
-  /isarray@2.0.5:
-    resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
-    dev: true
+  isarray@2.0.5: {}
 
-  /isexe@2.0.0:
-    resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+  isexe@2.0.0: {}
 
-  /isexe@3.1.1:
-    resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==}
-    engines: {node: '>=16'}
-    dev: true
+  isexe@3.1.1: {}
 
-  /isobject@3.0.1:
-    resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
-    engines: {node: '>=0.10.0'}
-    dev: true
+  isobject@3.0.1: {}
 
-  /jackspeak@2.1.1:
-    resolution: {integrity: sha512-juf9stUEwUaILepraGOWIJTLwg48bUnBmRqd2ln2Os1sW987zeoj/hzhbvRB95oMuS2ZTpjULmdwHNX4rzZIZw==}
-    engines: {node: '>=14'}
-    dependencies:
-      cliui: 8.0.1
-    optionalDependencies:
-      '@pkgjs/parseargs': 0.11.0
-    dev: true
-
-  /jackspeak@2.3.6:
-    resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==}
-    engines: {node: '>=14'}
+  jackspeak@3.4.3:
     dependencies:
       '@isaacs/cliui': 8.0.2
     optionalDependencies:
       '@pkgjs/parseargs': 0.11.0
-    dev: true
 
-  /jake@10.8.5:
-    resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==}
-    engines: {node: '>=10'}
-    hasBin: true
+  jake@10.8.5:
     dependencies:
       async: 3.2.4
       chalk: 4.1.2
       filelist: 1.0.4
       minimatch: 3.1.2
-    dev: true
 
-  /jake@10.8.7:
-    resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==}
-    engines: {node: '>=10'}
-    hasBin: true
+  jake@10.9.2:
     dependencies:
-      async: 3.2.5
+      async: 3.2.6
       chalk: 4.1.2
       filelist: 1.0.4
       minimatch: 3.1.2
-    dev: true
 
-  /jazz-midi@1.7.9:
-    resolution: {integrity: sha512-c8c4BBgwxdsIr1iVm53nadCrtH7BUlnX3V95ciK/gbvXN/ndE5+POskBalXgqlc/r9p2XUbdLTrgrC6fou5p9w==}
-    engines: {node: '>=10.0.0'}
-    dev: false
+  jazz-midi@1.7.9: {}
 
-  /jest-diff@29.7.0:
-    resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+  jest-diff@29.7.0:
     dependencies:
       chalk: 4.1.2
       diff-sequences: 29.6.3
       jest-get-type: 29.6.3
       pretty-format: 29.7.0
-    dev: true
 
-  /jest-get-type@29.6.3:
-    resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
-    dev: true
+  jest-get-type@29.6.3: {}
 
-  /jest-worker@26.6.2:
-    resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==}
-    engines: {node: '>= 10.13.0'}
+  jest-worker@26.6.2:
     dependencies:
-      '@types/node': 20.10.6
+      '@types/node': 20.16.12
       merge-stream: 2.0.0
       supports-color: 7.2.0
-    dev: true
 
-  /jiti@1.21.0:
-    resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==}
-    hasBin: true
-    dev: false
+  jiti@1.21.0: {}
 
-  /js-tokens@4.0.0:
-    resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+  js-tokens@4.0.0: {}
 
-  /js-yaml@3.14.1:
-    resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
-    hasBin: true
+  js-yaml@3.14.1:
     dependencies:
       argparse: 1.0.10
       esprima: 4.0.1
 
-  /js-yaml@4.1.0:
-    resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
-    hasBin: true
+  js-yaml@4.1.0:
     dependencies:
       argparse: 2.0.1
 
-  /js2xmlparser@4.0.2:
-    resolution: {integrity: sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==}
+  js2xmlparser@4.0.2:
     dependencies:
       xmlcreate: 2.0.4
-    dev: true
 
-  /jsdoc-api@8.0.0:
-    resolution: {integrity: sha512-Rnhor0suB1Ds1abjmFkFfKeD+kSMRN9oHMTMZoJVUrmtCGDwXty+sWMA9sa4xbe4UyxuPjhC7tavZ40mDKK6QQ==}
-    engines: {node: '>=12.17'}
+  jsbn@1.1.0: {}
+
+  jsdoc-api@8.1.1:
     dependencies:
       array-back: 6.2.2
       cache-point: 2.0.0
       collect-all: 1.0.4
       file-set: 4.0.2
       fs-then-native: 2.0.0
-      jsdoc: 4.0.2
+      jsdoc: 4.0.3
       object-to-spawn-args: 2.0.1
       temp-path: 1.0.0
-      walk-back: 5.1.0
-    dev: true
+      walk-back: 5.1.1
 
-  /jsdoc-json@2.0.2:
-    resolution: {integrity: sha512-n0vVkWvBMHFNUsW6HUhMrVCk+nJZwW3kpd9/JiCgdYvjjZV3NcP5fV3+lTgOkOA/bTKJxbCKT8Au92FHII3pnA==}
-    dev: true
+  jsdoc-json@2.0.2: {}
 
-  /jsdoc-parse@6.2.0:
-    resolution: {integrity: sha512-Afu1fQBEb7QHt6QWX/6eUWvYHJofB90Fjx7FuJYF7mnG9z5BkAIpms1wsnvYLytfmqpEENHs/fax9p8gvMj7dw==}
-    engines: {node: '>=12'}
+  jsdoc-parse@6.2.4:
     dependencies:
       array-back: 6.2.2
+      find-replace: 5.0.2
       lodash.omit: 4.5.0
-      lodash.pick: 4.4.0
-      reduce-extract: 1.0.0
-      sort-array: 4.1.5
-      test-value: 3.0.0
-    dev: true
+      sort-array: 5.0.0
+    transitivePeerDependencies:
+      - '@75lb/nature'
 
-  /jsdoc-to-markdown@8.0.0:
-    resolution: {integrity: sha512-2FQvYkg491+FP6s15eFlgSSWs69CvQrpbABGYBtvAvGWy/lWo8IKKToarT283w59rQFrpcjHl3YdhHCa3l7gXg==}
-    engines: {node: '>=12.17'}
-    hasBin: true
+  jsdoc-to-markdown@8.0.3:
     dependencies:
       array-back: 6.2.2
       command-line-tool: 0.8.0
       config-master: 3.1.0
-      dmd: 6.2.0
-      jsdoc-api: 8.0.0
-      jsdoc-parse: 6.2.0
-      walk-back: 5.1.0
-    dev: true
+      dmd: 6.2.3
+      jsdoc-api: 8.1.1
+      jsdoc-parse: 6.2.4
+      walk-back: 5.1.1
+    transitivePeerDependencies:
+      - '@75lb/nature'
 
-  /jsdoc@4.0.2:
-    resolution: {integrity: sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg==}
-    engines: {node: '>=12.0.0'}
-    hasBin: true
+  jsdoc@4.0.3:
     dependencies:
       '@babel/parser': 7.21.4
       '@jsdoc/salty': 0.2.3
-      '@types/markdown-it': 12.2.3
+      '@types/markdown-it': 14.1.2
       bluebird: 3.7.2
       catharsis: 0.9.0
       escape-string-regexp: 2.0.0
       js2xmlparser: 4.0.2
       klaw: 3.0.0
-      markdown-it: 12.3.2
-      markdown-it-anchor: 8.6.6(@types/markdown-it@12.2.3)(markdown-it@12.3.2)
+      markdown-it: 14.1.0
+      markdown-it-anchor: 8.6.7(@types/markdown-it@14.1.2)(markdown-it@14.1.0)
       marked: 4.2.12
       mkdirp: 1.0.4
       requizzle: 0.2.4
       strip-json-comments: 3.1.1
       underscore: 1.13.6
-    dev: true
 
-  /jsesc@0.5.0:
-    resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==}
-    hasBin: true
-    dev: true
+  jsesc@2.5.2: {}
 
-  /jsesc@2.5.2:
-    resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
-    engines: {node: '>=4'}
-    hasBin: true
+  jsesc@3.0.2: {}
 
-  /json-parse-better-errors@1.0.2:
-    resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==}
-    dev: true
+  json-buffer@3.0.1: {}
 
-  /json-parse-even-better-errors@2.3.1:
-    resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
-    dev: true
+  json-parse-better-errors@1.0.2: {}
 
-  /json-parse-even-better-errors@3.0.0:
-    resolution: {integrity: sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
-    dev: true
+  json-parse-even-better-errors@2.3.1: {}
 
-  /json-schema-traverse@0.4.1:
-    resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+  json-parse-even-better-errors@3.0.2: {}
 
-  /json-schema-traverse@1.0.0:
-    resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
-    dev: true
+  json-schema-traverse@0.4.1: {}
 
-  /json-schema@0.4.0:
-    resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==}
-    dev: true
+  json-schema-traverse@1.0.0: {}
 
-  /json-stable-stringify-without-jsonify@1.0.1:
-    resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+  json-schema@0.4.0: {}
 
-  /json-stringify-safe@5.0.1:
-    resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==}
-    dev: true
+  json-stable-stringify-without-jsonify@1.0.1: {}
 
-  /json5@1.0.2:
-    resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
-    hasBin: true
+  json-stringify-nice@1.1.4: {}
+
+  json-stringify-safe@5.0.1: {}
+
+  json5@1.0.2:
     dependencies:
-      minimist: 1.2.7
-    dev: true
+      minimist: 1.2.8
 
-  /json5@2.2.3:
-    resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
-    engines: {node: '>=6'}
-    hasBin: true
+  json5@2.2.3: {}
 
-  /jsonc-parser@3.2.0:
-    resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==}
-    dev: true
+  jsonc-parser@3.2.0: {}
 
-  /jsonfile@6.1.0:
-    resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
+  jsonfile@6.1.0:
     dependencies:
       universalify: 2.0.0
     optionalDependencies:
       graceful-fs: 4.2.11
-    dev: true
 
-  /jsonparse@1.3.1:
-    resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==}
-    engines: {'0': node >= 0.2.0}
-    dev: true
+  jsonparse@1.3.1: {}
 
-  /jsonpointer@5.0.1:
-    resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==}
-    engines: {node: '>=0.10.0'}
-    dev: true
+  jsonpointer@5.0.1: {}
 
-  /jzz@1.5.9:
-    resolution: {integrity: sha512-cqH+tSBtuFGrYinQnhdqn4zzGSLMkuLcX4ahGigH9vONAzCM1hoPmvwDJaM50BJFh5ok49cHfFlfvAGZtUIRQw==}
-    requiresBuild: true
+  just-diff-apply@5.5.0: {}
+
+  just-diff@6.0.2: {}
+
+  jzz@1.8.6:
     dependencies:
-      '@types/webmidi': 2.0.6
+      '@types/webmidi': 2.1.0
       jazz-midi: 1.7.9
-    dev: false
 
-  /jzz@1.7.7:
-    resolution: {integrity: sha512-fh7Qxb7G4q+7XqmayINHtGj2WpXtQTm+crFK0kg/s7JDhXLKg97MV0MXpADWNFJrNNVb9mkwNzW9sQlkRlfyug==}
-    requiresBuild: true
+  keyv@4.5.4:
     dependencies:
-      '@types/webmidi': 2.0.10
-      jazz-midi: 1.7.9
-    dev: false
-    optional: true
+      json-buffer: 3.0.1
 
-  /kind-of@6.0.3:
-    resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
-    engines: {node: '>=0.10.0'}
+  kind-of@6.0.3: {}
 
-  /klaw@3.0.0:
-    resolution: {integrity: sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==}
+  klaw@3.0.0:
     dependencies:
       graceful-fs: 4.2.10
-    dev: true
 
-  /kleur@3.0.3:
-    resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
-    engines: {node: '>=6'}
+  kleur@3.0.3: {}
 
-  /kleur@4.1.5:
-    resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
-    engines: {node: '>=6'}
+  kleur@4.1.5: {}
 
-  /lerna@8.0.1:
-    resolution: {integrity: sha512-ZxFMmOqwkP4e+q6BrMzxkAhixi6n0GVD2jAAnAfDkIFnwumB4/7X5/If6fqTlXXshtB2dQtN5OAtzafqVq8cwA==}
-    engines: {node: '>=18.0.0'}
-    hasBin: true
+  lerna@8.1.8(encoding@0.1.13):
     dependencies:
-      '@lerna/create': 8.0.1(typescript@5.3.3)
-      '@npmcli/run-script': 7.0.2
+      '@lerna/create': 8.1.8(encoding@0.1.13)(typescript@5.3.3)
+      '@npmcli/arborist': 7.5.4
+      '@npmcli/package-json': 5.2.0
+      '@npmcli/run-script': 8.1.0
       '@nx/devkit': 17.2.8(nx@17.2.8)
       '@octokit/plugin-enterprise-rest': 6.0.1
-      '@octokit/rest': 19.0.11
+      '@octokit/rest': 19.0.11(encoding@0.1.13)
+      aproba: 2.0.0
       byte-size: 8.1.1
       chalk: 4.1.0
       clone-deep: 4.0.1
-      cmd-shim: 6.0.1
+      cmd-shim: 6.0.3
+      color-support: 1.1.3
       columnify: 1.6.0
+      console-control-strings: 1.1.0
       conventional-changelog-angular: 7.0.0
       conventional-changelog-core: 5.0.1
       conventional-recommended-bump: 7.0.1
       cosmiconfig: 8.3.6(typescript@5.3.3)
-      dedent: 0.7.0
-      envinfo: 7.8.1
+      dedent: 1.5.3
+      envinfo: 7.13.0
       execa: 5.0.0
-      fs-extra: 11.1.1
+      fs-extra: 11.2.0
       get-port: 5.1.1
       get-stream: 6.0.0
-      git-url-parse: 13.1.0
-      glob-parent: 5.1.2
+      git-url-parse: 14.0.0
+      glob-parent: 6.0.2
       globby: 11.1.0
       graceful-fs: 4.2.11
       has-unicode: 2.0.1
       import-local: 3.1.0
       ini: 1.3.8
-      init-package-json: 5.0.0
+      init-package-json: 6.0.3
       inquirer: 8.2.5
       is-ci: 3.0.1
       is-stream: 2.0.0
       jest-diff: 29.7.0
       js-yaml: 4.1.0
-      libnpmaccess: 7.0.2
-      libnpmpublish: 7.3.0
+      libnpmaccess: 8.0.6
+      libnpmpublish: 9.0.9
       load-json-file: 6.2.0
       lodash: 4.17.21
       make-dir: 4.0.0
       minimatch: 3.0.5
       multimatch: 5.0.0
-      node-fetch: 2.6.7
-      npm-package-arg: 8.1.1
-      npm-packlist: 5.1.1
-      npm-registry-fetch: 14.0.5
-      npmlog: 6.0.2
+      node-fetch: 2.6.7(encoding@0.1.13)
+      npm-package-arg: 11.0.2
+      npm-packlist: 8.0.2
+      npm-registry-fetch: 17.1.0
       nx: 17.2.8
       p-map: 4.0.0
       p-map-series: 2.1.0
@@ -9363,24 +13440,27 @@ packages:
       p-queue: 6.6.2
       p-reduce: 2.1.0
       p-waterfall: 2.1.1
-      pacote: 17.0.5
+      pacote: 18.0.6
       pify: 5.0.0
       read-cmd-shim: 4.0.0
-      read-package-json: 6.0.4
       resolve-from: 5.0.0
       rimraf: 4.4.1
       semver: 7.5.4
+      set-blocking: 2.0.0
       signal-exit: 3.0.7
       slash: 3.0.0
-      ssri: 9.0.1
+      ssri: 10.0.6
+      string-width: 4.2.3
+      strip-ansi: 6.0.1
       strong-log-transformer: 2.1.0
-      tar: 6.1.11
+      tar: 6.2.1
       temp-dir: 1.0.0
       typescript: 5.3.3
       upath: 2.0.1
-      uuid: 9.0.1
+      uuid: 10.0.0
       validate-npm-package-license: 3.0.4
-      validate-npm-package-name: 5.0.0
+      validate-npm-package-name: 5.0.1
+      wide-align: 1.1.5
       write-file-atomic: 5.0.1
       write-pkg: 4.0.0
       yargs: 17.7.2
@@ -9388,372 +13468,220 @@ packages:
     transitivePeerDependencies:
       - '@swc-node/register'
       - '@swc/core'
+      - babel-plugin-macros
       - bluebird
       - debug
       - encoding
       - supports-color
-    dev: true
 
-  /leven@3.1.0:
-    resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
-    engines: {node: '>=6'}
-    dev: true
+  leven@3.1.0: {}
 
-  /levn@0.4.1:
-    resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
-    engines: {node: '>= 0.8.0'}
+  levn@0.4.1:
     dependencies:
       prelude-ls: 1.2.1
       type-check: 0.4.0
 
-  /libnpmaccess@7.0.2:
-    resolution: {integrity: sha512-vHBVMw1JFMTgEk15zRsJuSAg7QtGGHpUSEfnbcRL1/gTBag9iEfJbyjpDmdJmwMhvpoLoNBtdAUCdGnaP32hhw==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+  libnpmaccess@8.0.6:
     dependencies:
-      npm-package-arg: 10.1.0
-      npm-registry-fetch: 14.0.5
+      npm-package-arg: 11.0.2
+      npm-registry-fetch: 17.1.0
     transitivePeerDependencies:
-      - bluebird
       - supports-color
-    dev: true
 
-  /libnpmpublish@7.3.0:
-    resolution: {integrity: sha512-fHUxw5VJhZCNSls0KLNEG0mCD2PN1i14gH5elGOgiVnU3VgTcRahagYP2LKI1m0tFCJ+XrAm0zVYyF5RCbXzcg==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+  libnpmpublish@9.0.9:
     dependencies:
-      ci-info: 3.9.0
-      normalize-package-data: 5.0.0
-      npm-package-arg: 10.1.0
-      npm-registry-fetch: 14.0.5
-      proc-log: 3.0.0
-      semver: 7.5.4
-      sigstore: 1.4.0
-      ssri: 10.0.4
+      ci-info: 4.0.0
+      normalize-package-data: 6.0.2
+      npm-package-arg: 11.0.2
+      npm-registry-fetch: 17.1.0
+      proc-log: 4.2.0
+      semver: 7.6.3
+      sigstore: 2.3.1
+      ssri: 10.0.6
     transitivePeerDependencies:
-      - bluebird
       - supports-color
-    dev: true
 
-  /lilconfig@2.1.0:
-    resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
-    engines: {node: '>=10'}
-    dev: false
+  lilconfig@2.1.0: {}
 
-  /lilconfig@3.0.0:
-    resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==}
-    engines: {node: '>=14'}
-    dev: false
+  lilconfig@3.0.0: {}
 
-  /lines-and-columns@1.2.4:
-    resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+  lines-and-columns@1.2.4: {}
 
-  /lines-and-columns@2.0.3:
-    resolution: {integrity: sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-    dev: true
+  lines-and-columns@2.0.3: {}
 
-  /linkify-it@3.0.3:
-    resolution: {integrity: sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==}
+  linkify-it@5.0.0:
     dependencies:
-      uc.micro: 1.0.6
-    dev: true
+      uc.micro: 2.1.0
 
-  /lite-youtube-embed@0.2.0:
-    resolution: {integrity: sha512-XXXAk5sbvtjjwbie3XG+6HppgTm1HTGL/Uk9z9NkJH53o7puZLur434heHzAjkS60hZB3vT4ls25zl5rMiX4EA==}
-    dev: false
+  lite-youtube-embed@0.3.3: {}
 
-  /load-json-file@4.0.0:
-    resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==}
-    engines: {node: '>=4'}
+  load-json-file@4.0.0:
     dependencies:
       graceful-fs: 4.2.11
       parse-json: 4.0.0
       pify: 3.0.0
       strip-bom: 3.0.0
-    dev: true
 
-  /load-json-file@6.2.0:
-    resolution: {integrity: sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==}
-    engines: {node: '>=8'}
+  load-json-file@6.2.0:
     dependencies:
       graceful-fs: 4.2.11
       parse-json: 5.2.0
       strip-bom: 4.0.0
       type-fest: 0.6.0
-    dev: true
 
-  /load-yaml-file@0.2.0:
-    resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==}
-    engines: {node: '>=6'}
+  load-yaml-file@0.2.0:
     dependencies:
-      graceful-fs: 4.2.10
+      graceful-fs: 4.2.11
       js-yaml: 3.14.1
       pify: 4.0.1
       strip-bom: 3.0.0
 
-  /local-pkg@0.5.0:
-    resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==}
-    engines: {node: '>=14'}
-    dependencies:
-      mlly: 1.4.2
-      pkg-types: 1.0.3
-    dev: true
-
-  /locate-path@2.0.0:
-    resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==}
-    engines: {node: '>=4'}
+  locate-path@2.0.0:
     dependencies:
       p-locate: 2.0.0
       path-exists: 3.0.0
-    dev: true
 
-  /locate-path@5.0.0:
-    resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
-    engines: {node: '>=8'}
+  locate-path@5.0.0:
     dependencies:
       p-locate: 4.1.0
 
-  /locate-path@6.0.0:
-    resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
-    engines: {node: '>=10'}
+  locate-path@6.0.0:
     dependencies:
       p-locate: 5.0.0
 
-  /lodash.camelcase@4.3.0:
-    resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
-    dev: true
+  lodash.camelcase@4.3.0: {}
 
-  /lodash.castarray@4.4.0:
-    resolution: {integrity: sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==}
-    dev: false
+  lodash.castarray@4.4.0: {}
 
-  /lodash.debounce@4.0.8:
-    resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
-    dev: true
+  lodash.debounce@4.0.8: {}
 
-  /lodash.ismatch@4.4.0:
-    resolution: {integrity: sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==}
-    dev: true
+  lodash.ismatch@4.4.0: {}
 
-  /lodash.isplainobject@4.0.6:
-    resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
-    dev: false
+  lodash.isplainobject@4.0.6: {}
 
-  /lodash.merge@4.6.2:
-    resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+  lodash.merge@4.6.2: {}
 
-  /lodash.omit@4.5.0:
-    resolution: {integrity: sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg==}
-    dev: true
+  lodash.omit@4.5.0: {}
 
-  /lodash.padend@4.6.1:
-    resolution: {integrity: sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw==}
-    dev: true
+  lodash.padend@4.6.1: {}
 
-  /lodash.pick@4.4.0:
-    resolution: {integrity: sha512-hXt6Ul/5yWjfklSGvLQl8vM//l3FtyHZeuelpzK6mm99pNvN9yTDruNZPEJZD1oWrqo+izBmB7oUfWgcCX7s4Q==}
-    dev: true
+  lodash.sortby@4.7.0: {}
 
-  /lodash.sortby@4.7.0:
-    resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==}
-    dev: true
+  lodash@4.17.21: {}
 
-  /lodash@4.17.21:
-    resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
-    dev: true
-
-  /log-symbols@4.1.0:
-    resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==}
-    engines: {node: '>=10'}
+  log-symbols@4.1.0:
     dependencies:
       chalk: 4.1.2
       is-unicode-supported: 0.1.0
-    dev: true
 
-  /log-symbols@5.1.0:
-    resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==}
-    engines: {node: '>=12'}
+  log-symbols@6.0.0:
     dependencies:
       chalk: 5.3.0
       is-unicode-supported: 1.3.0
 
-  /longest-streak@3.1.0:
-    resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==}
+  longest-streak@3.1.0: {}
 
-  /loose-envify@1.4.0:
-    resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
-    hasBin: true
+  loose-envify@1.4.0:
     dependencies:
       js-tokens: 4.0.0
-    dev: false
 
-  /loupe@2.3.7:
-    resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==}
-    dependencies:
-      get-func-name: 2.0.2
-    dev: true
+  loupe@3.1.2: {}
 
-  /lru-cache@10.1.0:
-    resolution: {integrity: sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==}
-    engines: {node: 14 || >=16.14}
-    dev: true
+  lru-cache@10.4.3: {}
 
-  /lru-cache@5.1.1:
-    resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+  lru-cache@5.1.1:
     dependencies:
       yallist: 3.1.1
 
-  /lru-cache@6.0.0:
-    resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
-    engines: {node: '>=10'}
+  lru-cache@6.0.0:
     dependencies:
       yallist: 4.0.0
 
-  /lru-cache@7.18.3:
-    resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==}
-    engines: {node: '>=12'}
-    dev: true
+  lru-cache@9.1.1: {}
 
-  /lru-cache@9.1.1:
-    resolution: {integrity: sha512-65/Jky17UwSb0BuB9V+MyDpsOtXKmYwzhyl+cOa9XUiI4uV2Ouy/2voFP3+al0BjZbJgMBD8FojMpAf+Z+qn4A==}
-    engines: {node: 14 || >=16.14}
-    dev: true
-
-  /magic-string@0.25.9:
-    resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
+  magic-string@0.25.9:
     dependencies:
       sourcemap-codec: 1.4.8
-    dev: true
 
-  /magic-string@0.30.5:
-    resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==}
-    engines: {node: '>=12'}
+  magic-string@0.30.12:
     dependencies:
-      '@jridgewell/sourcemap-codec': 1.4.15
+      '@jridgewell/sourcemap-codec': 1.5.0
 
-  /make-dir@2.1.0:
-    resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==}
-    engines: {node: '>=6'}
+  magicast@0.3.5:
+    dependencies:
+      '@babel/parser': 7.25.8
+      '@babel/types': 7.25.8
+      source-map-js: 1.2.1
+
+  make-dir@2.1.0:
     dependencies:
       pify: 4.0.1
-      semver: 5.7.1
-    dev: true
+      semver: 5.7.2
 
-  /make-dir@4.0.0:
-    resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
-    engines: {node: '>=10'}
+  make-dir@4.0.0:
     dependencies:
-      semver: 7.5.4
-    dev: true
+      semver: 7.6.3
 
-  /make-fetch-happen@11.1.1:
-    resolution: {integrity: sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+  make-fetch-happen@13.0.1:
     dependencies:
-      agentkeepalive: 4.2.1
-      cacache: 17.0.6
+      '@npmcli/agent': 2.2.2
+      cacache: 18.0.4
       http-cache-semantics: 4.1.1
-      http-proxy-agent: 5.0.0
-      https-proxy-agent: 5.0.1
       is-lambda: 1.0.1
-      lru-cache: 7.18.3
-      minipass: 5.0.0
-      minipass-fetch: 3.0.3
+      minipass: 7.1.2
+      minipass-fetch: 3.0.5
       minipass-flush: 1.0.5
       minipass-pipeline: 1.2.4
       negotiator: 0.6.3
+      proc-log: 4.2.0
       promise-retry: 2.0.1
-      socks-proxy-agent: 7.0.0
-      ssri: 10.0.4
-    transitivePeerDependencies:
-      - bluebird
-      - supports-color
-    dev: true
-
-  /make-fetch-happen@13.0.0:
-    resolution: {integrity: sha512-7ThobcL8brtGo9CavByQrQi+23aIfgYU++wg4B87AIS8Rb2ZBt/MEaDqzA00Xwv/jUjAjYkLHjVolYuTLKda2A==}
-    engines: {node: ^16.14.0 || >=18.0.0}
-    dependencies:
-      '@npmcli/agent': 2.2.0
-      cacache: 18.0.1
-      http-cache-semantics: 4.1.1
-      is-lambda: 1.0.1
-      minipass: 7.0.4
-      minipass-fetch: 3.0.3
-      minipass-flush: 1.0.5
-      minipass-pipeline: 1.2.4
-      negotiator: 0.6.3
-      promise-retry: 2.0.1
-      ssri: 10.0.4
+      ssri: 10.0.6
     transitivePeerDependencies:
       - supports-color
-    dev: true
 
-  /map-obj@1.0.1:
-    resolution: {integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==}
-    engines: {node: '>=0.10.0'}
-    dev: true
+  map-obj@1.0.1: {}
 
-  /map-obj@4.3.0:
-    resolution: {integrity: sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==}
-    engines: {node: '>=8'}
-    dev: true
+  map-obj@4.3.0: {}
 
-  /markdown-extensions@2.0.0:
-    resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==}
-    engines: {node: '>=16'}
-    dev: false
+  markdown-extensions@2.0.0: {}
 
-  /markdown-it-anchor@8.6.6(@types/markdown-it@12.2.3)(markdown-it@12.3.2):
-    resolution: {integrity: sha512-jRW30YGywD2ESXDc+l17AiritL0uVaSnWsb26f+68qaW9zgbIIr1f4v2Nsvc0+s0Z2N3uX6t/yAw7BwCQ1wMsA==}
-    peerDependencies:
-      '@types/markdown-it': '*'
-      markdown-it: '*'
+  markdown-it-anchor@8.6.7(@types/markdown-it@14.1.2)(markdown-it@14.1.0):
     dependencies:
-      '@types/markdown-it': 12.2.3
-      markdown-it: 12.3.2
-    dev: true
+      '@types/markdown-it': 14.1.2
+      markdown-it: 14.1.0
 
-  /markdown-it@12.3.2:
-    resolution: {integrity: sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==}
-    hasBin: true
+  markdown-it@14.1.0:
     dependencies:
       argparse: 2.0.1
-      entities: 2.1.0
-      linkify-it: 3.0.3
-      mdurl: 1.0.1
-      uc.micro: 1.0.6
-    dev: true
+      entities: 4.5.0
+      linkify-it: 5.0.0
+      mdurl: 2.0.0
+      punycode.js: 2.3.1
+      uc.micro: 2.1.0
 
-  /markdown-table@3.0.3:
-    resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==}
+  markdown-table@3.0.3: {}
 
-  /marked@4.2.12:
-    resolution: {integrity: sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw==}
-    engines: {node: '>= 12'}
-    hasBin: true
-    dev: true
+  marked@4.2.12: {}
 
-  /mdast-util-definitions@6.0.0:
-    resolution: {integrity: sha512-scTllyX6pnYNZH/AIp/0ePz6s4cZtARxImwoPJ7kS42n+MnVsI4XbnG6d4ibehRIldYMWM2LD7ImQblVhUejVQ==}
+  marked@4.3.0: {}
+
+  mdast-util-definitions@6.0.0:
     dependencies:
-      '@types/mdast': 4.0.2
-      '@types/unist': 3.0.1
+      '@types/mdast': 4.0.4
+      '@types/unist': 3.0.3
       unist-util-visit: 5.0.0
 
-  /mdast-util-find-and-replace@3.0.1:
-    resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==}
+  mdast-util-find-and-replace@3.0.1:
     dependencies:
-      '@types/mdast': 4.0.2
+      '@types/mdast': 4.0.4
       escape-string-regexp: 5.0.0
       unist-util-is: 6.0.0
       unist-util-visit-parents: 6.0.1
 
-  /mdast-util-from-markdown@2.0.0:
-    resolution: {integrity: sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==}
+  mdast-util-from-markdown@2.0.1:
     dependencies:
-      '@types/mdast': 4.0.2
-      '@types/unist': 3.0.1
+      '@types/mdast': 4.0.4
+      '@types/unist': 3.0.3
       decode-named-character-reference: 1.0.2
       devlop: 1.1.0
       mdast-util-to-string: 4.0.0
@@ -9767,60 +13695,54 @@ packages:
     transitivePeerDependencies:
       - supports-color
 
-  /mdast-util-gfm-autolink-literal@2.0.0:
-    resolution: {integrity: sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==}
+  mdast-util-gfm-autolink-literal@2.0.0:
     dependencies:
-      '@types/mdast': 4.0.2
+      '@types/mdast': 4.0.4
       ccount: 2.0.1
       devlop: 1.1.0
       mdast-util-find-and-replace: 3.0.1
-      micromark-util-character: 2.0.1
+      micromark-util-character: 2.1.0
 
-  /mdast-util-gfm-footnote@2.0.0:
-    resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==}
+  mdast-util-gfm-footnote@2.0.0:
     dependencies:
-      '@types/mdast': 4.0.2
+      '@types/mdast': 4.0.4
       devlop: 1.1.0
-      mdast-util-from-markdown: 2.0.0
+      mdast-util-from-markdown: 2.0.1
       mdast-util-to-markdown: 2.1.0
       micromark-util-normalize-identifier: 2.0.0
     transitivePeerDependencies:
       - supports-color
 
-  /mdast-util-gfm-strikethrough@2.0.0:
-    resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==}
+  mdast-util-gfm-strikethrough@2.0.0:
     dependencies:
-      '@types/mdast': 4.0.2
-      mdast-util-from-markdown: 2.0.0
+      '@types/mdast': 4.0.4
+      mdast-util-from-markdown: 2.0.1
       mdast-util-to-markdown: 2.1.0
     transitivePeerDependencies:
       - supports-color
 
-  /mdast-util-gfm-table@2.0.0:
-    resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==}
+  mdast-util-gfm-table@2.0.0:
     dependencies:
-      '@types/mdast': 4.0.2
+      '@types/mdast': 4.0.4
       devlop: 1.1.0
       markdown-table: 3.0.3
-      mdast-util-from-markdown: 2.0.0
+      mdast-util-from-markdown: 2.0.1
       mdast-util-to-markdown: 2.1.0
     transitivePeerDependencies:
       - supports-color
 
-  /mdast-util-gfm-task-list-item@2.0.0:
-    resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==}
+  mdast-util-gfm-task-list-item@2.0.0:
     dependencies:
-      '@types/mdast': 4.0.2
+      '@types/mdast': 4.0.4
       devlop: 1.1.0
-      mdast-util-from-markdown: 2.0.0
+      mdast-util-from-markdown: 2.0.1
       mdast-util-to-markdown: 2.1.0
     transitivePeerDependencies:
       - supports-color
 
-  /mdast-util-gfm@3.0.0:
-    resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==}
+  mdast-util-gfm@3.0.0:
     dependencies:
-      mdast-util-from-markdown: 2.0.0
+      mdast-util-from-markdown: 2.0.1
       mdast-util-gfm-autolink-literal: 2.0.0
       mdast-util-gfm-footnote: 2.0.0
       mdast-util-gfm-strikethrough: 2.0.0
@@ -9830,87 +13752,76 @@ packages:
     transitivePeerDependencies:
       - supports-color
 
-  /mdast-util-mdx-expression@2.0.0:
-    resolution: {integrity: sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==}
+  mdast-util-mdx-expression@2.0.1:
     dependencies:
-      '@types/estree-jsx': 1.0.0
-      '@types/hast': 3.0.2
-      '@types/mdast': 4.0.2
+      '@types/estree-jsx': 1.0.5
+      '@types/hast': 3.0.4
+      '@types/mdast': 4.0.4
       devlop: 1.1.0
-      mdast-util-from-markdown: 2.0.0
+      mdast-util-from-markdown: 2.0.1
       mdast-util-to-markdown: 2.1.0
     transitivePeerDependencies:
       - supports-color
-    dev: false
 
-  /mdast-util-mdx-jsx@3.0.0:
-    resolution: {integrity: sha512-XZuPPzQNBPAlaqsTTgRrcJnyFbSOBovSadFgbFu8SnuNgm+6Bdx1K+IWoitsmj6Lq6MNtI+ytOqwN70n//NaBA==}
+  mdast-util-mdx-jsx@3.1.3:
     dependencies:
-      '@types/estree-jsx': 1.0.0
-      '@types/hast': 3.0.2
-      '@types/mdast': 4.0.2
-      '@types/unist': 3.0.1
+      '@types/estree-jsx': 1.0.5
+      '@types/hast': 3.0.4
+      '@types/mdast': 4.0.4
+      '@types/unist': 3.0.3
       ccount: 2.0.1
       devlop: 1.1.0
-      mdast-util-from-markdown: 2.0.0
+      mdast-util-from-markdown: 2.0.1
       mdast-util-to-markdown: 2.1.0
-      parse-entities: 4.0.0
-      stringify-entities: 4.0.3
-      unist-util-remove-position: 5.0.0
+      parse-entities: 4.0.1
+      stringify-entities: 4.0.4
       unist-util-stringify-position: 4.0.0
       vfile-message: 4.0.2
     transitivePeerDependencies:
       - supports-color
-    dev: false
 
-  /mdast-util-mdx@3.0.0:
-    resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==}
+  mdast-util-mdx@3.0.0:
     dependencies:
-      mdast-util-from-markdown: 2.0.0
-      mdast-util-mdx-expression: 2.0.0
-      mdast-util-mdx-jsx: 3.0.0
+      mdast-util-from-markdown: 2.0.1
+      mdast-util-mdx-expression: 2.0.1
+      mdast-util-mdx-jsx: 3.1.3
       mdast-util-mdxjs-esm: 2.0.1
       mdast-util-to-markdown: 2.1.0
     transitivePeerDependencies:
       - supports-color
-    dev: false
 
-  /mdast-util-mdxjs-esm@2.0.1:
-    resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==}
+  mdast-util-mdxjs-esm@2.0.1:
     dependencies:
-      '@types/estree-jsx': 1.0.0
-      '@types/hast': 3.0.2
-      '@types/mdast': 4.0.2
+      '@types/estree-jsx': 1.0.5
+      '@types/hast': 3.0.4
+      '@types/mdast': 4.0.4
       devlop: 1.1.0
-      mdast-util-from-markdown: 2.0.0
+      mdast-util-from-markdown: 2.0.1
       mdast-util-to-markdown: 2.1.0
     transitivePeerDependencies:
       - supports-color
-    dev: false
 
-  /mdast-util-phrasing@4.0.0:
-    resolution: {integrity: sha512-xadSsJayQIucJ9n053dfQwVu1kuXg7jCTdYsMK8rqzKZh52nLfSH/k0sAxE0u+pj/zKZX+o5wB+ML5mRayOxFA==}
+  mdast-util-phrasing@4.0.0:
     dependencies:
-      '@types/mdast': 4.0.2
+      '@types/mdast': 4.0.4
       unist-util-is: 6.0.0
 
-  /mdast-util-to-hast@13.0.2:
-    resolution: {integrity: sha512-U5I+500EOOw9e3ZrclN3Is3fRpw8c19SMyNZlZ2IS+7vLsNzb2Om11VpIVOR+/0137GhZsFEF6YiKD5+0Hr2Og==}
+  mdast-util-to-hast@13.2.0:
     dependencies:
-      '@types/hast': 3.0.2
-      '@types/mdast': 4.0.2
+      '@types/hast': 3.0.4
+      '@types/mdast': 4.0.4
       '@ungap/structured-clone': 1.2.0
       devlop: 1.1.0
       micromark-util-sanitize-uri: 2.0.0
       trim-lines: 3.0.1
       unist-util-position: 5.0.0
       unist-util-visit: 5.0.0
+      vfile: 6.0.3
 
-  /mdast-util-to-markdown@2.1.0:
-    resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==}
+  mdast-util-to-markdown@2.1.0:
     dependencies:
-      '@types/mdast': 4.0.2
-      '@types/unist': 3.0.1
+      '@types/mdast': 4.0.4
+      '@types/unist': 3.0.3
       longest-streak: 3.1.0
       mdast-util-phrasing: 4.0.0
       mdast-util-to-string: 4.0.0
@@ -9918,13 +13829,11 @@ packages:
       unist-util-visit: 5.0.0
       zwitch: 2.0.4
 
-  /mdast-util-to-string@4.0.0:
-    resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==}
+  mdast-util-to-string@4.0.0:
     dependencies:
       '@types/mdast': 4.0.2
 
-  /mdast-util-toc@7.0.0:
-    resolution: {integrity: sha512-C28UcSqjmnWuvgT8d97qpaItHKvySqVPAECUzqQ51xuMyNFFJwcFoKW77KoMjtXrclTidLQFDzLUmTmrshRweA==}
+  mdast-util-toc@7.0.0:
     dependencies:
       '@types/mdast': 4.0.2
       '@types/ungap__structured-clone': 0.3.3
@@ -9933,15 +13842,10 @@ packages:
       mdast-util-to-string: 4.0.0
       unist-util-is: 6.0.0
       unist-util-visit: 5.0.0
-    dev: false
 
-  /mdurl@1.0.1:
-    resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==}
-    dev: true
+  mdurl@2.0.0: {}
 
-  /meow@8.1.2:
-    resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==}
-    engines: {node: '>=10'}
+  meow@8.1.2:
     dependencies:
       '@types/minimist': 1.2.2
       camelcase-keys: 6.2.2
@@ -9954,18 +13858,12 @@ packages:
       trim-newlines: 3.0.1
       type-fest: 0.18.1
       yargs-parser: 20.2.9
-    dev: true
 
-  /merge-stream@2.0.0:
-    resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+  merge-stream@2.0.0: {}
 
-  /merge2@1.4.1:
-    resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
-    engines: {node: '>= 8'}
+  merge2@1.4.1: {}
 
-  /meyda@5.6.2:
-    resolution: {integrity: sha512-FSHo8XDdmhIDeBJ2nht9WYRj0VIQ8wbzcfken0YIHUuuxVMnpDcvzVfXyY2m6YkA7q6ypzKROUNV4yoXG0uogQ==}
-    hasBin: true
+  meyda@5.6.2:
     dependencies:
       dct: 0.1.0
       fftjs: 0.0.4
@@ -9973,10 +13871,8 @@ packages:
       wav: 1.0.2
     transitivePeerDependencies:
       - supports-color
-    dev: false
 
-  /micromark-core-commonmark@2.0.0:
-    resolution: {integrity: sha512-jThOz/pVmAYUtkroV3D5c1osFXAMv9e0ypGDOIZuCeAe91/sD6BoE2Sjzt30yuXtwOYUmySOhMas/PVyh02itA==}
+  micromark-core-commonmark@2.0.1:
     dependencies:
       decode-named-character-reference: 1.0.2
       devlop: 1.1.0
@@ -9985,38 +13881,35 @@ packages:
       micromark-factory-space: 2.0.0
       micromark-factory-title: 2.0.0
       micromark-factory-whitespace: 2.0.0
-      micromark-util-character: 2.0.1
+      micromark-util-character: 2.1.0
       micromark-util-chunked: 2.0.0
       micromark-util-classify-character: 2.0.0
       micromark-util-html-tag-name: 2.0.0
       micromark-util-normalize-identifier: 2.0.0
       micromark-util-resolve-all: 2.0.0
-      micromark-util-subtokenize: 2.0.0
+      micromark-util-subtokenize: 2.0.1
       micromark-util-symbol: 2.0.0
       micromark-util-types: 2.0.0
 
-  /micromark-extension-gfm-autolink-literal@2.0.0:
-    resolution: {integrity: sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==}
+  micromark-extension-gfm-autolink-literal@2.0.0:
     dependencies:
-      micromark-util-character: 2.0.1
+      micromark-util-character: 2.1.0
       micromark-util-sanitize-uri: 2.0.0
       micromark-util-symbol: 2.0.0
       micromark-util-types: 2.0.0
 
-  /micromark-extension-gfm-footnote@2.0.0:
-    resolution: {integrity: sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==}
+  micromark-extension-gfm-footnote@2.0.0:
     dependencies:
       devlop: 1.1.0
-      micromark-core-commonmark: 2.0.0
+      micromark-core-commonmark: 2.0.1
       micromark-factory-space: 2.0.0
-      micromark-util-character: 2.0.1
+      micromark-util-character: 2.1.0
       micromark-util-normalize-identifier: 2.0.0
       micromark-util-sanitize-uri: 2.0.0
       micromark-util-symbol: 2.0.0
       micromark-util-types: 2.0.0
 
-  /micromark-extension-gfm-strikethrough@2.0.0:
-    resolution: {integrity: sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==}
+  micromark-extension-gfm-strikethrough@2.0.0:
     dependencies:
       devlop: 1.1.0
       micromark-util-chunked: 2.0.0
@@ -10025,31 +13918,27 @@ packages:
       micromark-util-symbol: 2.0.0
       micromark-util-types: 2.0.0
 
-  /micromark-extension-gfm-table@2.0.0:
-    resolution: {integrity: sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==}
+  micromark-extension-gfm-table@2.0.0:
     dependencies:
       devlop: 1.1.0
       micromark-factory-space: 2.0.0
-      micromark-util-character: 2.0.1
+      micromark-util-character: 2.1.0
       micromark-util-symbol: 2.0.0
       micromark-util-types: 2.0.0
 
-  /micromark-extension-gfm-tagfilter@2.0.0:
-    resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==}
+  micromark-extension-gfm-tagfilter@2.0.0:
     dependencies:
       micromark-util-types: 2.0.0
 
-  /micromark-extension-gfm-task-list-item@2.0.1:
-    resolution: {integrity: sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==}
+  micromark-extension-gfm-task-list-item@2.0.1:
     dependencies:
       devlop: 1.1.0
       micromark-factory-space: 2.0.0
-      micromark-util-character: 2.0.1
+      micromark-util-character: 2.1.0
       micromark-util-symbol: 2.0.0
       micromark-util-types: 2.0.0
 
-  /micromark-extension-gfm@3.0.0:
-    resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==}
+  micromark-extension-gfm@3.0.0:
     dependencies:
       micromark-extension-gfm-autolink-literal: 2.0.0
       micromark-extension-gfm-footnote: 2.0.0
@@ -10060,214 +13949,182 @@ packages:
       micromark-util-combine-extensions: 2.0.0
       micromark-util-types: 2.0.0
 
-  /micromark-extension-mdx-expression@3.0.0:
-    resolution: {integrity: sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==}
+  micromark-extension-mdx-expression@3.0.0:
     dependencies:
-      '@types/estree': 1.0.0
+      '@types/estree': 1.0.6
       devlop: 1.1.0
-      micromark-factory-mdx-expression: 2.0.1
+      micromark-factory-mdx-expression: 2.0.2
       micromark-factory-space: 2.0.0
-      micromark-util-character: 2.0.1
+      micromark-util-character: 2.1.0
       micromark-util-events-to-acorn: 2.0.2
       micromark-util-symbol: 2.0.0
       micromark-util-types: 2.0.0
-    dev: false
 
-  /micromark-extension-mdx-jsx@3.0.0:
-    resolution: {integrity: sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==}
+  micromark-extension-mdx-jsx@3.0.1:
     dependencies:
       '@types/acorn': 4.0.6
-      '@types/estree': 1.0.0
+      '@types/estree': 1.0.6
       devlop: 1.1.0
       estree-util-is-identifier-name: 3.0.0
-      micromark-factory-mdx-expression: 2.0.1
+      micromark-factory-mdx-expression: 2.0.2
       micromark-factory-space: 2.0.0
-      micromark-util-character: 2.0.1
+      micromark-util-character: 2.1.0
+      micromark-util-events-to-acorn: 2.0.2
       micromark-util-symbol: 2.0.0
       micromark-util-types: 2.0.0
       vfile-message: 4.0.2
-    dev: false
 
-  /micromark-extension-mdx-md@2.0.0:
-    resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==}
+  micromark-extension-mdx-md@2.0.0:
     dependencies:
       micromark-util-types: 2.0.0
-    dev: false
 
-  /micromark-extension-mdxjs-esm@3.0.0:
-    resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==}
+  micromark-extension-mdxjs-esm@3.0.0:
     dependencies:
-      '@types/estree': 1.0.0
+      '@types/estree': 1.0.6
       devlop: 1.1.0
-      micromark-core-commonmark: 2.0.0
-      micromark-util-character: 2.0.1
+      micromark-core-commonmark: 2.0.1
+      micromark-util-character: 2.1.0
       micromark-util-events-to-acorn: 2.0.2
       micromark-util-symbol: 2.0.0
       micromark-util-types: 2.0.0
       unist-util-position-from-estree: 2.0.0
       vfile-message: 4.0.2
-    dev: false
 
-  /micromark-extension-mdxjs@3.0.0:
-    resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==}
+  micromark-extension-mdxjs@3.0.0:
     dependencies:
-      acorn: 8.11.3
-      acorn-jsx: 5.3.2(acorn@8.11.3)
+      acorn: 8.13.0
+      acorn-jsx: 5.3.2(acorn@8.13.0)
       micromark-extension-mdx-expression: 3.0.0
-      micromark-extension-mdx-jsx: 3.0.0
+      micromark-extension-mdx-jsx: 3.0.1
       micromark-extension-mdx-md: 2.0.0
       micromark-extension-mdxjs-esm: 3.0.0
       micromark-util-combine-extensions: 2.0.0
       micromark-util-types: 2.0.0
-    dev: false
 
-  /micromark-factory-destination@2.0.0:
-    resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==}
+  micromark-factory-destination@2.0.0:
     dependencies:
-      micromark-util-character: 2.0.1
+      micromark-util-character: 2.1.0
       micromark-util-symbol: 2.0.0
       micromark-util-types: 2.0.0
 
-  /micromark-factory-label@2.0.0:
-    resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==}
+  micromark-factory-label@2.0.0:
     dependencies:
       devlop: 1.1.0
-      micromark-util-character: 2.0.1
+      micromark-util-character: 2.1.0
       micromark-util-symbol: 2.0.0
       micromark-util-types: 2.0.0
 
-  /micromark-factory-mdx-expression@2.0.1:
-    resolution: {integrity: sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==}
+  micromark-factory-mdx-expression@2.0.2:
     dependencies:
-      '@types/estree': 1.0.0
+      '@types/estree': 1.0.6
       devlop: 1.1.0
-      micromark-util-character: 2.0.1
+      micromark-factory-space: 2.0.0
+      micromark-util-character: 2.1.0
       micromark-util-events-to-acorn: 2.0.2
       micromark-util-symbol: 2.0.0
       micromark-util-types: 2.0.0
       unist-util-position-from-estree: 2.0.0
       vfile-message: 4.0.2
-    dev: false
 
-  /micromark-factory-space@2.0.0:
-    resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==}
+  micromark-factory-space@2.0.0:
     dependencies:
-      micromark-util-character: 2.0.1
+      micromark-util-character: 2.1.0
       micromark-util-types: 2.0.0
 
-  /micromark-factory-title@2.0.0:
-    resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==}
+  micromark-factory-title@2.0.0:
     dependencies:
       micromark-factory-space: 2.0.0
-      micromark-util-character: 2.0.1
+      micromark-util-character: 2.1.0
       micromark-util-symbol: 2.0.0
       micromark-util-types: 2.0.0
 
-  /micromark-factory-whitespace@2.0.0:
-    resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==}
+  micromark-factory-whitespace@2.0.0:
     dependencies:
       micromark-factory-space: 2.0.0
-      micromark-util-character: 2.0.1
+      micromark-util-character: 2.1.0
       micromark-util-symbol: 2.0.0
       micromark-util-types: 2.0.0
 
-  /micromark-util-character@2.0.1:
-    resolution: {integrity: sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==}
+  micromark-util-character@2.1.0:
     dependencies:
       micromark-util-symbol: 2.0.0
       micromark-util-types: 2.0.0
 
-  /micromark-util-chunked@2.0.0:
-    resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==}
+  micromark-util-chunked@2.0.0:
     dependencies:
       micromark-util-symbol: 2.0.0
 
-  /micromark-util-classify-character@2.0.0:
-    resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==}
+  micromark-util-classify-character@2.0.0:
     dependencies:
-      micromark-util-character: 2.0.1
+      micromark-util-character: 2.1.0
       micromark-util-symbol: 2.0.0
       micromark-util-types: 2.0.0
 
-  /micromark-util-combine-extensions@2.0.0:
-    resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==}
+  micromark-util-combine-extensions@2.0.0:
     dependencies:
       micromark-util-chunked: 2.0.0
       micromark-util-types: 2.0.0
 
-  /micromark-util-decode-numeric-character-reference@2.0.1:
-    resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==}
+  micromark-util-decode-numeric-character-reference@2.0.1:
     dependencies:
       micromark-util-symbol: 2.0.0
 
-  /micromark-util-decode-string@2.0.0:
-    resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==}
+  micromark-util-decode-string@2.0.0:
     dependencies:
       decode-named-character-reference: 1.0.2
-      micromark-util-character: 2.0.1
+      micromark-util-character: 2.1.0
       micromark-util-decode-numeric-character-reference: 2.0.1
       micromark-util-symbol: 2.0.0
 
-  /micromark-util-encode@2.0.0:
-    resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==}
+  micromark-util-encode@2.0.0: {}
 
-  /micromark-util-events-to-acorn@2.0.2:
-    resolution: {integrity: sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==}
+  micromark-util-events-to-acorn@2.0.2:
     dependencies:
       '@types/acorn': 4.0.6
-      '@types/estree': 1.0.0
-      '@types/unist': 3.0.1
+      '@types/estree': 1.0.6
+      '@types/unist': 3.0.3
       devlop: 1.1.0
       estree-util-visit: 2.0.0
       micromark-util-symbol: 2.0.0
       micromark-util-types: 2.0.0
       vfile-message: 4.0.2
-    dev: false
 
-  /micromark-util-html-tag-name@2.0.0:
-    resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==}
+  micromark-util-html-tag-name@2.0.0: {}
 
-  /micromark-util-normalize-identifier@2.0.0:
-    resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==}
+  micromark-util-normalize-identifier@2.0.0:
     dependencies:
       micromark-util-symbol: 2.0.0
 
-  /micromark-util-resolve-all@2.0.0:
-    resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==}
+  micromark-util-resolve-all@2.0.0:
     dependencies:
       micromark-util-types: 2.0.0
 
-  /micromark-util-sanitize-uri@2.0.0:
-    resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==}
+  micromark-util-sanitize-uri@2.0.0:
     dependencies:
-      micromark-util-character: 2.0.1
+      micromark-util-character: 2.1.0
       micromark-util-encode: 2.0.0
       micromark-util-symbol: 2.0.0
 
-  /micromark-util-subtokenize@2.0.0:
-    resolution: {integrity: sha512-vc93L1t+gpR3p8jxeVdaYlbV2jTYteDje19rNSS/H5dlhxUYll5Fy6vJ2cDwP8RnsXi818yGty1ayP55y3W6fg==}
+  micromark-util-subtokenize@2.0.1:
     dependencies:
       devlop: 1.1.0
       micromark-util-chunked: 2.0.0
       micromark-util-symbol: 2.0.0
       micromark-util-types: 2.0.0
 
-  /micromark-util-symbol@2.0.0:
-    resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==}
+  micromark-util-symbol@2.0.0: {}
 
-  /micromark-util-types@2.0.0:
-    resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==}
+  micromark-util-types@2.0.0: {}
 
-  /micromark@4.0.0:
-    resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==}
+  micromark@4.0.0:
     dependencies:
       '@types/debug': 4.1.7
-      debug: 4.3.4
+      debug: 4.3.7
       decode-named-character-reference: 1.0.2
       devlop: 1.1.0
-      micromark-core-commonmark: 2.0.0
+      micromark-core-commonmark: 2.0.1
       micromark-factory-space: 2.0.0
-      micromark-util-character: 2.0.1
+      micromark-util-character: 2.1.0
       micromark-util-chunked: 2.0.0
       micromark-util-combine-extensions: 2.0.0
       micromark-util-decode-numeric-character-reference: 2.0.1
@@ -10275,656 +14132,309 @@ packages:
       micromark-util-normalize-identifier: 2.0.0
       micromark-util-resolve-all: 2.0.0
       micromark-util-sanitize-uri: 2.0.0
-      micromark-util-subtokenize: 2.0.0
+      micromark-util-subtokenize: 2.0.1
       micromark-util-symbol: 2.0.0
       micromark-util-types: 2.0.0
     transitivePeerDependencies:
       - supports-color
 
-  /micromatch@4.0.5:
-    resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
-    engines: {node: '>=8.6'}
+  micromatch@4.0.5:
     dependencies:
       braces: 3.0.2
       picomatch: 2.3.1
 
-  /mime-db@1.52.0:
-    resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
-    engines: {node: '>= 0.6'}
-    dev: true
+  micromatch@4.0.8:
+    dependencies:
+      braces: 3.0.3
+      picomatch: 2.3.1
 
-  /mime-types@2.1.35:
-    resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
-    engines: {node: '>= 0.6'}
+  mime-db@1.52.0: {}
+
+  mime-types@2.1.35:
     dependencies:
       mime-db: 1.52.0
-    dev: true
 
-  /mime@3.0.0:
-    resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
-    engines: {node: '>=10.0.0'}
-    hasBin: true
+  mimic-fn@2.1.0: {}
 
-  /mimic-fn@2.1.0:
-    resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
-    engines: {node: '>=6'}
+  mimic-function@5.0.1: {}
 
-  /mimic-fn@4.0.0:
-    resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
-    engines: {node: '>=12'}
+  mimic-response@3.1.0: {}
 
-  /mimic-response@3.1.0:
-    resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
-    engines: {node: '>=10'}
-    dev: true
+  min-indent@1.0.1: {}
 
-  /min-indent@1.0.1:
-    resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
-    engines: {node: '>=4'}
-    dev: true
+  mini-svg-data-uri@1.4.4: {}
 
-  /mini-svg-data-uri@1.4.4:
-    resolution: {integrity: sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==}
-    hasBin: true
-    dev: false
-
-  /minimatch@3.0.5:
-    resolution: {integrity: sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==}
-    dependencies:
-      brace-expansion: 1.1.11
-    dev: true
-
-  /minimatch@3.1.2:
-    resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+  minimatch@3.0.5:
     dependencies:
       brace-expansion: 1.1.11
 
-  /minimatch@5.1.6:
-    resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
-    engines: {node: '>=10'}
+  minimatch@3.1.2:
+    dependencies:
+      brace-expansion: 1.1.11
+
+  minimatch@5.1.6:
     dependencies:
       brace-expansion: 2.0.1
-    dev: true
 
-  /minimatch@7.4.6:
-    resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==}
-    engines: {node: '>=10'}
+  minimatch@8.0.4:
     dependencies:
       brace-expansion: 2.0.1
-    dev: true
 
-  /minimatch@8.0.4:
-    resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==}
-    engines: {node: '>=16 || 14 >=14.17'}
+  minimatch@9.0.5:
     dependencies:
       brace-expansion: 2.0.1
-    dev: true
 
-  /minimatch@9.0.0:
-    resolution: {integrity: sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==}
-    engines: {node: '>=16 || 14 >=14.17'}
-    dependencies:
-      brace-expansion: 2.0.1
-    dev: true
-
-  /minimatch@9.0.3:
-    resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==}
-    engines: {node: '>=16 || 14 >=14.17'}
-    dependencies:
-      brace-expansion: 2.0.1
-    dev: true
-
-  /minimist-options@4.1.0:
-    resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==}
-    engines: {node: '>= 6'}
+  minimist-options@4.1.0:
     dependencies:
       arrify: 1.0.1
       is-plain-obj: 1.1.0
       kind-of: 6.0.3
-    dev: true
 
-  /minimist@1.2.7:
-    resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==}
+  minimist@1.2.7: {}
 
-  /minipass-collect@1.0.2:
-    resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==}
-    engines: {node: '>= 8'}
+  minimist@1.2.8: {}
+
+  minipass-collect@2.0.1:
     dependencies:
-      minipass: 3.3.6
-    dev: true
+      minipass: 7.1.2
 
-  /minipass-collect@2.0.1:
-    resolution: {integrity: sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==}
-    engines: {node: '>=16 || 14 >=14.17'}
+  minipass-fetch@3.0.5:
     dependencies:
-      minipass: 7.0.4
-    dev: true
-
-  /minipass-fetch@3.0.3:
-    resolution: {integrity: sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
-    dependencies:
-      minipass: 5.0.0
+      minipass: 7.1.2
       minipass-sized: 1.0.3
       minizlib: 2.1.2
     optionalDependencies:
       encoding: 0.1.13
-    dev: true
 
-  /minipass-flush@1.0.5:
-    resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==}
-    engines: {node: '>= 8'}
+  minipass-flush@1.0.5:
     dependencies:
       minipass: 3.3.6
-    dev: true
 
-  /minipass-json-stream@1.0.1:
-    resolution: {integrity: sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==}
-    dependencies:
-      jsonparse: 1.3.1
-      minipass: 3.3.6
-    dev: true
-
-  /minipass-pipeline@1.2.4:
-    resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==}
-    engines: {node: '>=8'}
+  minipass-pipeline@1.2.4:
     dependencies:
       minipass: 3.3.6
-    dev: true
 
-  /minipass-sized@1.0.3:
-    resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==}
-    engines: {node: '>=8'}
+  minipass-sized@1.0.3:
     dependencies:
       minipass: 3.3.6
-    dev: true
 
-  /minipass@3.3.6:
-    resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==}
-    engines: {node: '>=8'}
+  minipass@3.3.6:
     dependencies:
       yallist: 4.0.0
-    dev: true
 
-  /minipass@4.0.0:
-    resolution: {integrity: sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw==}
-    engines: {node: '>=8'}
-    dependencies:
-      yallist: 4.0.0
-    dev: true
+  minipass@4.2.8: {}
 
-  /minipass@4.2.8:
-    resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==}
-    engines: {node: '>=8'}
-    dev: true
+  minipass@5.0.0: {}
 
-  /minipass@5.0.0:
-    resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==}
-    engines: {node: '>=8'}
-    dev: true
+  minipass@7.1.2: {}
 
-  /minipass@7.0.4:
-    resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==}
-    engines: {node: '>=16 || 14 >=14.17'}
-    dev: true
-
-  /minizlib@2.1.2:
-    resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==}
-    engines: {node: '>= 8'}
+  minizlib@2.1.2:
     dependencies:
       minipass: 3.3.6
       yallist: 4.0.0
-    dev: true
 
-  /mkdirp-classic@0.5.3:
-    resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==}
-    dev: true
+  mkdirp-classic@0.5.3: {}
 
-  /mkdirp2@1.0.5:
-    resolution: {integrity: sha512-xOE9xbICroUDmG1ye2h4bZ8WBie9EGmACaco8K8cx6RlkJJrxGIqjGqztAI+NMhexXBcdGbSEzI6N3EJPevxZw==}
-    dev: true
+  mkdirp2@1.0.5: {}
 
-  /mkdirp@1.0.4:
-    resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==}
-    engines: {node: '>=10'}
-    hasBin: true
-    dev: true
+  mkdirp@1.0.4: {}
 
-  /mlly@1.4.0:
-    resolution: {integrity: sha512-ua8PAThnTwpprIaU47EPeZ/bPUVp2QYBbWMphUQpVdBI3Lgqzm5KZQ45Agm3YJedHXaIHl6pBGabaLSUPPSptg==}
-    dependencies:
-      acorn: 8.11.3
-      pathe: 1.1.1
-      pkg-types: 1.0.3
-      ufo: 1.1.2
-    dev: true
+  modify-values@1.0.1: {}
 
-  /mlly@1.4.2:
-    resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==}
-    dependencies:
-      acorn: 8.11.3
-      pathe: 1.1.1
-      pkg-types: 1.0.3
-      ufo: 1.3.2
-    dev: true
-
-  /modify-values@1.0.1:
-    resolution: {integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==}
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  /module-definition@5.0.1:
-    resolution: {integrity: sha512-kvw3B4G19IXk+BOXnYq/D/VeO9qfHaapMeuS7w7sNUqmGaA6hywdFHMi+VWeR9wUScXM7XjoryTffCZ5B0/8IA==}
-    engines: {node: '>=14'}
-    hasBin: true
+  module-definition@5.0.1:
     dependencies:
       ast-module-types: 5.0.0
       node-source-walk: 6.0.2
-    dev: true
 
-  /module-lookup-amd@8.0.5:
-    resolution: {integrity: sha512-vc3rYLjDo5Frjox8NZpiyLXsNWJ5BWshztc/5KSOMzpg9k5cHH652YsJ7VKKmtM4SvaxuE9RkrYGhiSjH3Ehow==}
-    engines: {node: '>=14'}
-    hasBin: true
+  module-lookup-amd@8.0.5:
     dependencies:
       commander: 10.0.1
       glob: 7.2.3
-      requirejs: 2.3.6
+      requirejs: 2.3.7
       requirejs-config-file: 4.0.0
-    dev: true
 
-  /mrmime@2.0.0:
-    resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==}
-    engines: {node: '>=10'}
-    dev: true
+  mrmime@2.0.0: {}
 
-  /ms@2.0.0:
-    resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
+  ms@2.0.0: {}
 
-  /ms@2.1.2:
-    resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+  ms@2.1.3: {}
 
-  /ms@2.1.3:
-    resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
-
-  /multimatch@5.0.0:
-    resolution: {integrity: sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==}
-    engines: {node: '>=10'}
+  multimatch@5.0.0:
     dependencies:
       '@types/minimatch': 3.0.5
       array-differ: 3.0.0
       array-union: 2.1.0
       arrify: 2.0.1
       minimatch: 3.1.2
-    dev: true
 
-  /multistream@4.1.0:
-    resolution: {integrity: sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==}
+  multistream@4.1.0:
     dependencies:
       once: 1.4.0
       readable-stream: 3.6.0
-    dev: true
 
-  /mute-stream@0.0.8:
-    resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
-    dev: true
+  mute-stream@0.0.8: {}
 
-  /mute-stream@1.0.0:
-    resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
-    dev: true
+  mute-stream@1.0.0: {}
 
-  /mz@2.7.0:
-    resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
+  mz@2.7.0:
     dependencies:
       any-promise: 1.3.0
       object-assign: 4.1.1
       thenify-all: 1.6.0
-    dev: false
 
-  /nanoid@3.3.7:
-    resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
-    engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
-    hasBin: true
+  nanoid@3.3.7: {}
 
-  /nanoid@5.0.4:
-    resolution: {integrity: sha512-vAjmBf13gsmhXSgBrtIclinISzFFy22WwCYoyilZlsrRXNIHSwgFQ1bEdjRwMT3aoadeIF6HMuDRlOxzfXV8ig==}
-    engines: {node: ^18 || >=20}
-    hasBin: true
-    dev: false
+  nanoid@5.0.7: {}
 
-  /nanostores@0.9.5:
-    resolution: {integrity: sha512-Z+p+g8E7yzaWwOe5gEUB2Ox0rCEeXWYIZWmYvw/ajNYX8DlXdMvMDj8DWfM/subqPAcsf8l8Td4iAwO1DeIIRQ==}
-    engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0}
-    dev: false
+  nanostores@0.9.5: {}
 
-  /napi-build-utils@1.0.2:
-    resolution: {integrity: sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==}
-    dev: true
+  napi-build-utils@1.0.2: {}
 
-  /natural-compare@1.4.0:
-    resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+  natural-compare@1.4.0: {}
 
-  /needle@2.9.1:
-    resolution: {integrity: sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==}
-    engines: {node: '>= 4.4.x'}
-    hasBin: true
+  negotiator@0.6.3: {}
+
+  neo-async@2.6.2: {}
+
+  neotraverse@0.6.18: {}
+
+  nlcst-to-string@3.1.1:
     dependencies:
-      debug: 3.2.7
-      iconv-lite: 0.4.24
-      sax: 1.3.0
-    transitivePeerDependencies:
-      - supports-color
+      '@types/nlcst': 1.0.4
 
-  /negotiator@0.6.3:
-    resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
-    engines: {node: '>= 0.6'}
-    dev: true
-
-  /neo-async@2.6.2:
-    resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
-    dev: true
-
-  /nlcst-to-string@3.1.1:
-    resolution: {integrity: sha512-63mVyqaqt0cmn2VcI2aH6kxe1rLAmSROqHMA0i4qqg1tidkfExgpb0FGMikMCn86mw5dFtBtEANfmSSK7TjNHw==}
+  nlcst-to-string@4.0.0:
     dependencies:
-      '@types/nlcst': 1.0.0
+      '@types/nlcst': 2.0.3
 
-  /node-abi@3.40.0:
-    resolution: {integrity: sha512-zNy02qivjjRosswoYmPi8hIKJRr8MpQyeKT6qlcq/OnOgA3Rhoae+IYOqsM9V5+JnHWmxKnWOT2GxvtqdtOCXA==}
-    engines: {node: '>=10'}
+  node-abi@3.40.0:
     dependencies:
-      semver: 7.5.4
-    dev: true
+      semver: 7.6.3
 
-  /node-domexception@1.0.0:
-    resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
-    engines: {node: '>=10.5.0'}
-    dev: true
+  node-addon-api@8.0.0: {}
 
-  /node-fetch@2.6.7:
-    resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==}
-    engines: {node: 4.x || >=6.0.0}
-    peerDependencies:
-      encoding: ^0.1.0
-    peerDependenciesMeta:
-      encoding:
-        optional: true
+  node-addon-api@8.2.1: {}
+
+  node-domexception@1.0.0: {}
+
+  node-fetch@2.6.7(encoding@0.1.13):
     dependencies:
       whatwg-url: 5.0.0
-    dev: true
+    optionalDependencies:
+      encoding: 0.1.13
 
-  /node-fetch@2.6.8:
-    resolution: {integrity: sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg==}
-    engines: {node: 4.x || >=6.0.0}
-    peerDependencies:
-      encoding: ^0.1.0
-    peerDependenciesMeta:
-      encoding:
-        optional: true
+  node-fetch@2.6.8(encoding@0.1.13):
     dependencies:
       whatwg-url: 5.0.0
-    dev: true
+    optionalDependencies:
+      encoding: 0.1.13
 
-  /node-fetch@3.3.2:
-    resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+  node-fetch@3.3.2:
     dependencies:
       data-uri-to-buffer: 4.0.1
       fetch-blob: 3.2.0
       formdata-polyfill: 4.0.10
-    dev: true
 
-  /node-getopt@0.3.2:
-    resolution: {integrity: sha512-yqkmYrMbK1wPrfz7mgeYvA4tBperLg9FQ4S3Sau3nSAkpOA0x0zC8nQ1siBwozy1f4SE8vq2n1WKv99r+PCa1Q==}
-    engines: {node: '>= 0.6.0'}
-    dev: false
+  node-getopt@0.3.2: {}
 
-  /node-gyp@10.0.1:
-    resolution: {integrity: sha512-gg3/bHehQfZivQVfqIyy8wTdSymF9yTyP4CJifK73imyNMU8AIGQE2pUa7dNWfmMeG9cDVF2eehiRMv0LC1iAg==}
-    engines: {node: ^16.14.0 || >=18.0.0}
-    hasBin: true
+  node-gyp-build@4.8.2: {}
+
+  node-gyp@10.2.0:
     dependencies:
       env-paths: 2.2.1
       exponential-backoff: 3.1.1
-      glob: 10.3.10
+      glob: 10.4.5
       graceful-fs: 4.2.11
-      make-fetch-happen: 13.0.0
-      nopt: 7.1.0
-      proc-log: 3.0.0
-      semver: 7.5.4
-      tar: 6.1.13
+      make-fetch-happen: 13.0.1
+      nopt: 7.2.1
+      proc-log: 4.2.0
+      semver: 7.6.3
+      tar: 6.2.1
       which: 4.0.0
     transitivePeerDependencies:
       - supports-color
-    dev: true
 
-  /node-machine-id@1.1.12:
-    resolution: {integrity: sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==}
-    dev: true
+  node-machine-id@1.1.12: {}
 
-  /node-releases@2.0.13:
-    resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==}
-    dev: false
+  node-releases@2.0.18: {}
 
-  /node-releases@2.0.14:
-    resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==}
-
-  /node-source-walk@6.0.2:
-    resolution: {integrity: sha512-jn9vOIK/nfqoFCcpK89/VCVaLg1IHE6UVfDOzvqmANaJ/rWCTEdH8RZ1V278nv2jr36BJdyQXIAavBLXpzdlag==}
-    engines: {node: '>=14'}
+  node-source-walk@6.0.2:
     dependencies:
-      '@babel/parser': 7.23.6
-    dev: true
+      '@babel/parser': 7.25.8
 
-  /nopt@7.1.0:
-    resolution: {integrity: sha512-ZFPLe9Iu0tnx7oWhFxAo4s7QTn8+NNDDxYNaKLjE7Dp0tbakQ3M1QhQzsnzXHQBTUO3K9BmwaxnyO8Ayn2I95Q==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
-    hasBin: true
+  nopt@7.2.1:
     dependencies:
       abbrev: 2.0.0
-    dev: true
 
-  /normalize-package-data@2.5.0:
-    resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
+  normalize-package-data@2.5.0:
     dependencies:
       hosted-git-info: 2.8.9
       resolve: 1.22.8
-      semver: 5.7.1
+      semver: 5.7.2
       validate-npm-package-license: 3.0.4
-    dev: true
 
-  /normalize-package-data@3.0.3:
-    resolution: {integrity: sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==}
-    engines: {node: '>=10'}
+  normalize-package-data@3.0.3:
     dependencies:
       hosted-git-info: 4.1.0
-      is-core-module: 2.13.1
-      semver: 7.5.4
+      is-core-module: 2.15.1
+      semver: 7.6.3
       validate-npm-package-license: 3.0.4
-    dev: true
 
-  /normalize-package-data@5.0.0:
-    resolution: {integrity: sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+  normalize-package-data@6.0.2:
     dependencies:
-      hosted-git-info: 6.1.1
-      is-core-module: 2.13.1
-      semver: 7.5.4
+      hosted-git-info: 7.0.2
+      semver: 7.6.3
       validate-npm-package-license: 3.0.4
-    dev: true
 
-  /normalize-package-data@6.0.0:
-    resolution: {integrity: sha512-UL7ELRVxYBHBgYEtZCXjxuD5vPxnmvMGq0jp/dGPKKrN7tfsBh2IY7TlJ15WWwdjRWD3RJbnsygUurTK3xkPkg==}
-    engines: {node: ^16.14.0 || >=18.0.0}
+  normalize-path@3.0.0: {}
+
+  normalize-range@0.1.2: {}
+
+  npm-bundled@3.0.1:
     dependencies:
-      hosted-git-info: 7.0.1
-      is-core-module: 2.13.1
-      semver: 7.5.4
-      validate-npm-package-license: 3.0.4
-    dev: true
+      npm-normalize-package-bin: 3.0.1
 
-  /normalize-path@3.0.0:
-    resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
-    engines: {node: '>=0.10.0'}
-
-  /normalize-range@0.1.2:
-    resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
-    engines: {node: '>=0.10.0'}
-    dev: false
-
-  /npm-bundled@1.1.2:
-    resolution: {integrity: sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==}
+  npm-install-checks@6.3.0:
     dependencies:
-      npm-normalize-package-bin: 1.0.1
-    dev: true
+      semver: 7.6.3
 
-  /npm-bundled@3.0.0:
-    resolution: {integrity: sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+  npm-normalize-package-bin@3.0.1: {}
+
+  npm-package-arg@11.0.2:
     dependencies:
-      npm-normalize-package-bin: 3.0.0
-    dev: true
+      hosted-git-info: 7.0.2
+      proc-log: 4.2.0
+      semver: 7.6.3
+      validate-npm-package-name: 5.0.1
 
-  /npm-install-checks@6.1.1:
-    resolution: {integrity: sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+  npm-packlist@8.0.2:
     dependencies:
-      semver: 7.5.4
-    dev: true
+      ignore-walk: 6.0.5
 
-  /npm-normalize-package-bin@1.0.1:
-    resolution: {integrity: sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==}
-    dev: true
-
-  /npm-normalize-package-bin@3.0.0:
-    resolution: {integrity: sha512-g+DPQSkusnk7HYXr75NtzkIP4+N81i3RPsGFidF3DzHd9MT9wWngmqoeg/fnHFz5MNdtG4w03s+QnhewSLTT2Q==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
-    dev: true
-
-  /npm-package-arg@10.1.0:
-    resolution: {integrity: sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+  npm-pick-manifest@9.1.0:
     dependencies:
-      hosted-git-info: 6.1.1
-      proc-log: 3.0.0
-      semver: 7.5.4
-      validate-npm-package-name: 5.0.0
-    dev: true
+      npm-install-checks: 6.3.0
+      npm-normalize-package-bin: 3.0.1
+      npm-package-arg: 11.0.2
+      semver: 7.6.3
 
-  /npm-package-arg@11.0.1:
-    resolution: {integrity: sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ==}
-    engines: {node: ^16.14.0 || >=18.0.0}
+  npm-registry-fetch@17.1.0:
     dependencies:
-      hosted-git-info: 7.0.1
-      proc-log: 3.0.0
-      semver: 7.5.4
-      validate-npm-package-name: 5.0.0
-    dev: true
-
-  /npm-package-arg@8.1.1:
-    resolution: {integrity: sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg==}
-    engines: {node: '>=10'}
-    dependencies:
-      hosted-git-info: 3.0.8
-      semver: 7.5.4
-      validate-npm-package-name: 3.0.0
-    dev: true
-
-  /npm-packlist@5.1.1:
-    resolution: {integrity: sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw==}
-    engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
-    hasBin: true
-    dependencies:
-      glob: 8.1.0
-      ignore-walk: 5.0.1
-      npm-bundled: 1.1.2
-      npm-normalize-package-bin: 1.0.1
-    dev: true
-
-  /npm-packlist@8.0.1:
-    resolution: {integrity: sha512-MQpL27ZrsJQ2kiAuQPpZb5LtJwydNRnI15QWXsf3WHERu4rzjRj6Zju/My2fov7tLuu3Gle/uoIX/DDZ3u4O4Q==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
-    dependencies:
-      ignore-walk: 6.0.4
-    dev: true
-
-  /npm-pick-manifest@9.0.0:
-    resolution: {integrity: sha512-VfvRSs/b6n9ol4Qb+bDwNGUXutpy76x6MARw/XssevE0TnctIKcmklJZM5Z7nqs5z5aW+0S63pgCNbpkUNNXBg==}
-    engines: {node: ^16.14.0 || >=18.0.0}
-    dependencies:
-      npm-install-checks: 6.1.1
-      npm-normalize-package-bin: 3.0.0
-      npm-package-arg: 11.0.1
-      semver: 7.5.4
-    dev: true
-
-  /npm-registry-fetch@14.0.5:
-    resolution: {integrity: sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
-    dependencies:
-      make-fetch-happen: 11.1.1
-      minipass: 5.0.0
-      minipass-fetch: 3.0.3
-      minipass-json-stream: 1.0.1
+      '@npmcli/redact': 2.0.1
+      jsonparse: 1.3.1
+      make-fetch-happen: 13.0.1
+      minipass: 7.1.2
+      minipass-fetch: 3.0.5
       minizlib: 2.1.2
-      npm-package-arg: 10.1.0
-      proc-log: 3.0.0
-    transitivePeerDependencies:
-      - bluebird
-      - supports-color
-    dev: true
-
-  /npm-registry-fetch@16.1.0:
-    resolution: {integrity: sha512-PQCELXKt8Azvxnt5Y85GseQDJJlglTFM9L9U9gkv2y4e9s0k3GVDdOx3YoB6gm2Do0hlkzC39iCGXby+Wve1Bw==}
-    engines: {node: ^16.14.0 || >=18.0.0}
-    dependencies:
-      make-fetch-happen: 13.0.0
-      minipass: 7.0.4
-      minipass-fetch: 3.0.3
-      minipass-json-stream: 1.0.1
-      minizlib: 2.1.2
-      npm-package-arg: 11.0.1
-      proc-log: 3.0.0
+      npm-package-arg: 11.0.2
+      proc-log: 4.2.0
     transitivePeerDependencies:
       - supports-color
-    dev: true
 
-  /npm-run-path@4.0.1:
-    resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
-    engines: {node: '>=8'}
+  npm-run-path@4.0.1:
     dependencies:
       path-key: 3.1.1
-    dev: true
 
-  /npm-run-path@5.1.0:
-    resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-    dependencies:
-      path-key: 4.0.0
-
-  /npmlog@6.0.2:
-    resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==}
-    engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
-    dependencies:
-      are-we-there-yet: 3.0.1
-      console-control-strings: 1.1.0
-      gauge: 4.0.4
-      set-blocking: 2.0.0
-    dev: true
-
-  /nx@17.2.8:
-    resolution: {integrity: sha512-rM5zXbuXLEuqQqcjVjClyvHwRJwt+NVImR2A6KFNG40Z60HP6X12wAxxeLHF5kXXTDRU0PFhf/yACibrpbPrAw==}
-    hasBin: true
-    requiresBuild: true
-    peerDependencies:
-      '@swc-node/register': ^1.6.7
-      '@swc/core': ^1.3.85
-    peerDependenciesMeta:
-      '@swc-node/register':
-        optional: true
-      '@swc/core':
-        optional: true
+  nx@17.2.8:
     dependencies:
       '@nrwl/tao': 17.2.8
       '@yarnpkg/lockfile': 1.1.0
@@ -10940,7 +14450,7 @@ packages:
       enquirer: 2.3.6
       figures: 3.2.0
       flat: 5.0.2
-      fs-extra: 11.1.1
+      fs-extra: 11.2.0
       glob: 7.1.4
       ignore: 5.2.4
       jest-diff: 29.7.0
@@ -10957,7 +14467,7 @@ packages:
       tar-stream: 2.2.0
       tmp: 0.2.1
       tsconfig-paths: 4.2.0
-      tslib: 2.5.0
+      tslib: 2.8.0
       yargs: 17.7.2
       yargs-parser: 21.1.1
     optionalDependencies:
@@ -10973,102 +14483,77 @@ packages:
       '@nx/nx-win32-x64-msvc': 17.2.8
     transitivePeerDependencies:
       - debug
-    dev: true
 
-  /object-assign@4.1.1:
-    resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
-    engines: {node: '>=0.10.0'}
-    dev: false
+  object-assign@4.1.1: {}
 
-  /object-get@2.1.1:
-    resolution: {integrity: sha512-7n4IpLMzGGcLEMiQKsNR7vCe+N5E9LORFrtNUVy4sO3dj9a3HedZCxEL2T7QuLhcHN1NBuBsMOKaOsAYI9IIvg==}
-    dev: true
+  object-get@2.1.1: {}
 
-  /object-hash@3.0.0:
-    resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
-    engines: {node: '>= 6'}
-    dev: false
+  object-hash@3.0.0: {}
 
-  /object-inspect@1.13.1:
-    resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==}
-    dev: true
+  object-inspect@1.13.1: {}
 
-  /object-keys@1.1.1:
-    resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
-    engines: {node: '>= 0.4'}
-    dev: true
+  object-inspect@1.13.2: {}
 
-  /object-to-spawn-args@2.0.1:
-    resolution: {integrity: sha512-6FuKFQ39cOID+BMZ3QaphcC8Y4cw6LXBLyIgPU+OhIYwviJamPAn+4mITapnSBQrejB+NNp+FMskhD8Cq+Ys3w==}
-    engines: {node: '>=8.0.0'}
-    dev: true
+  object-keys@1.1.1: {}
 
-  /object.assign@4.1.4:
-    resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==}
-    engines: {node: '>= 0.4'}
+  object-to-spawn-args@2.0.1: {}
+
+  object.assign@4.1.4:
     dependencies:
       call-bind: 1.0.5
       define-properties: 1.2.1
       has-symbols: 1.0.3
       object-keys: 1.1.1
-    dev: true
 
-  /object.fromentries@2.0.7:
-    resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==}
-    engines: {node: '>= 0.4'}
+  object.assign@4.1.5:
     dependencies:
-      call-bind: 1.0.2
+      call-bind: 1.0.7
       define-properties: 1.2.1
-      es-abstract: 1.22.3
-    dev: true
+      has-symbols: 1.0.3
+      object-keys: 1.1.1
 
-  /object.groupby@1.0.1:
-    resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==}
+  object.fromentries@2.0.8:
     dependencies:
-      call-bind: 1.0.2
+      call-bind: 1.0.7
       define-properties: 1.2.1
-      es-abstract: 1.22.3
-      get-intrinsic: 1.2.2
-    dev: true
+      es-abstract: 1.23.3
+      es-object-atoms: 1.0.0
 
-  /object.values@1.1.7:
-    resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==}
-    engines: {node: '>= 0.4'}
+  object.groupby@1.0.3:
     dependencies:
-      call-bind: 1.0.2
+      call-bind: 1.0.7
       define-properties: 1.2.1
-      es-abstract: 1.22.3
-    dev: true
+      es-abstract: 1.23.3
 
-  /once@1.4.0:
-    resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+  object.values@1.2.0:
+    dependencies:
+      call-bind: 1.0.7
+      define-properties: 1.2.1
+      es-object-atoms: 1.0.0
+
+  once@1.4.0:
     dependencies:
       wrappy: 1.0.2
 
-  /onetime@5.1.2:
-    resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
-    engines: {node: '>=6'}
+  onetime@5.1.2:
     dependencies:
       mimic-fn: 2.1.0
 
-  /onetime@6.0.0:
-    resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
-    engines: {node: '>=12'}
+  onetime@7.0.0:
     dependencies:
-      mimic-fn: 4.0.0
+      mimic-function: 5.0.1
 
-  /open@8.4.0:
-    resolution: {integrity: sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==}
-    engines: {node: '>=12'}
+  oniguruma-to-js@0.4.3:
+    dependencies:
+      regex: 4.3.3
+
+  open@8.4.0:
     dependencies:
       define-lazy-prop: 2.0.0
       is-docker: 2.2.1
       is-wsl: 2.2.0
-    dev: true
 
-  /optionator@0.9.3:
-    resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==}
-    engines: {node: '>= 0.8.0'}
+  optionator@0.9.3:
     dependencies:
       '@aashutoshrathi/word-wrap': 1.2.6
       deep-is: 0.1.4
@@ -11077,9 +14562,7 @@ packages:
       prelude-ls: 1.2.1
       type-check: 0.4.0
 
-  /ora@5.4.1:
-    resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
-    engines: {node: '>=10'}
+  ora@5.4.1:
     dependencies:
       bl: 4.1.0
       chalk: 4.1.2
@@ -11090,192 +14573,132 @@ packages:
       log-symbols: 4.1.0
       strip-ansi: 6.0.1
       wcwidth: 1.0.1
-    dev: true
 
-  /ora@7.0.1:
-    resolution: {integrity: sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==}
-    engines: {node: '>=16'}
+  ora@8.1.0:
     dependencies:
       chalk: 5.3.0
-      cli-cursor: 4.0.0
-      cli-spinners: 2.9.1
+      cli-cursor: 5.0.0
+      cli-spinners: 2.9.2
       is-interactive: 2.0.0
-      is-unicode-supported: 1.3.0
-      log-symbols: 5.1.0
-      stdin-discarder: 0.1.0
-      string-width: 6.1.0
+      is-unicode-supported: 2.1.0
+      log-symbols: 6.0.0
+      stdin-discarder: 0.2.2
+      string-width: 7.2.0
       strip-ansi: 7.1.0
 
-  /os-tmpdir@1.0.2:
-    resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
-    engines: {node: '>=0.10.0'}
-    dev: true
+  os-tmpdir@1.0.2: {}
 
-  /osc-js@2.4.0:
-    resolution: {integrity: sha512-9cvB8m6zt/iCsmeDdFJaD4mjC8preB1Gio+NVmjT0S3qxiejTfJ8vGudyTQciL9yqQHEuINNYS5Kb94+Ceqekg==}
+  osc-js@2.4.1:
     dependencies:
-      ws: 8.12.0
+      ws: 8.18.0
     transitivePeerDependencies:
       - bufferutil
       - utf-8-validate
-    dev: false
 
-  /p-finally@1.0.0:
-    resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==}
-    engines: {node: '>=4'}
-    dev: true
+  p-finally@1.0.0: {}
 
-  /p-is-promise@3.0.0:
-    resolution: {integrity: sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==}
-    engines: {node: '>=8'}
-    dev: true
+  p-is-promise@3.0.0: {}
 
-  /p-limit@1.3.0:
-    resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==}
-    engines: {node: '>=4'}
+  p-limit@1.3.0:
     dependencies:
       p-try: 1.0.0
-    dev: true
 
-  /p-limit@2.3.0:
-    resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
-    engines: {node: '>=6'}
+  p-limit@2.3.0:
     dependencies:
       p-try: 2.2.0
 
-  /p-limit@3.1.0:
-    resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
-    engines: {node: '>=10'}
+  p-limit@3.1.0:
     dependencies:
       yocto-queue: 0.1.0
 
-  /p-limit@5.0.0:
-    resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==}
-    engines: {node: '>=18'}
+  p-limit@6.1.0:
     dependencies:
-      yocto-queue: 1.0.0
+      yocto-queue: 1.1.1
 
-  /p-locate@2.0.0:
-    resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==}
-    engines: {node: '>=4'}
+  p-locate@2.0.0:
     dependencies:
       p-limit: 1.3.0
-    dev: true
 
-  /p-locate@4.1.0:
-    resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
-    engines: {node: '>=8'}
+  p-locate@4.1.0:
     dependencies:
       p-limit: 2.3.0
 
-  /p-locate@5.0.0:
-    resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
-    engines: {node: '>=10'}
+  p-locate@5.0.0:
     dependencies:
       p-limit: 3.1.0
 
-  /p-map-series@2.1.0:
-    resolution: {integrity: sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==}
-    engines: {node: '>=8'}
-    dev: true
+  p-map-series@2.1.0: {}
 
-  /p-map@4.0.0:
-    resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==}
-    engines: {node: '>=10'}
+  p-map@4.0.0:
     dependencies:
       aggregate-error: 3.1.0
-    dev: true
 
-  /p-pipe@3.1.0:
-    resolution: {integrity: sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==}
-    engines: {node: '>=8'}
-    dev: true
+  p-pipe@3.1.0: {}
 
-  /p-queue@6.6.2:
-    resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==}
-    engines: {node: '>=8'}
+  p-queue@6.6.2:
     dependencies:
       eventemitter3: 4.0.7
       p-timeout: 3.2.0
-    dev: true
 
-  /p-queue@8.0.1:
-    resolution: {integrity: sha512-NXzu9aQJTAzbBqOt2hwsR63ea7yvxJc0PwN/zobNAudYfb1B7R08SzB4TsLeSbUCuG467NhnoT0oO6w1qRO+BA==}
-    engines: {node: '>=18'}
+  p-queue@8.0.1:
     dependencies:
       eventemitter3: 5.0.1
       p-timeout: 6.1.2
 
-  /p-reduce@2.1.0:
-    resolution: {integrity: sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==}
-    engines: {node: '>=8'}
-    dev: true
+  p-reduce@2.1.0: {}
 
-  /p-timeout@3.2.0:
-    resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==}
-    engines: {node: '>=8'}
+  p-timeout@3.2.0:
     dependencies:
       p-finally: 1.0.0
-    dev: true
 
-  /p-timeout@6.1.2:
-    resolution: {integrity: sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ==}
-    engines: {node: '>=14.16'}
+  p-timeout@6.1.2: {}
 
-  /p-try@1.0.0:
-    resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==}
-    engines: {node: '>=4'}
-    dev: true
+  p-try@1.0.0: {}
 
-  /p-try@2.2.0:
-    resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
-    engines: {node: '>=6'}
+  p-try@2.2.0: {}
 
-  /p-waterfall@2.1.1:
-    resolution: {integrity: sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==}
-    engines: {node: '>=8'}
+  p-waterfall@2.1.1:
     dependencies:
       p-reduce: 2.1.0
-    dev: true
 
-  /pacote@17.0.5:
-    resolution: {integrity: sha512-TAE0m20zSDMnchPja9vtQjri19X3pZIyRpm2TJVeI+yU42leJBBDTRYhOcWFsPhaMxf+3iwQkFiKz16G9AEeeA==}
-    engines: {node: ^16.14.0 || >=18.0.0}
-    hasBin: true
+  package-json-from-dist@1.0.1: {}
+
+  pacote@18.0.6:
     dependencies:
-      '@npmcli/git': 5.0.3
-      '@npmcli/installed-package-contents': 2.0.2
-      '@npmcli/promise-spawn': 7.0.0
-      '@npmcli/run-script': 7.0.2
-      cacache: 18.0.1
-      fs-minipass: 3.0.2
-      minipass: 7.0.4
-      npm-package-arg: 11.0.1
-      npm-packlist: 8.0.1
-      npm-pick-manifest: 9.0.0
-      npm-registry-fetch: 16.1.0
-      proc-log: 3.0.0
+      '@npmcli/git': 5.0.8
+      '@npmcli/installed-package-contents': 2.1.0
+      '@npmcli/package-json': 5.2.0
+      '@npmcli/promise-spawn': 7.0.2
+      '@npmcli/run-script': 8.1.0
+      cacache: 18.0.4
+      fs-minipass: 3.0.3
+      minipass: 7.1.2
+      npm-package-arg: 11.0.2
+      npm-packlist: 8.0.2
+      npm-pick-manifest: 9.1.0
+      npm-registry-fetch: 17.1.0
+      proc-log: 4.2.0
       promise-retry: 2.0.1
-      read-package-json: 7.0.0
-      read-package-json-fast: 3.0.2
-      sigstore: 2.1.0
-      ssri: 10.0.4
-      tar: 6.1.13
+      sigstore: 2.3.1
+      ssri: 10.0.6
+      tar: 6.2.1
     transitivePeerDependencies:
       - bluebird
       - supports-color
-    dev: true
 
-  /parent-module@1.0.1:
-    resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
-    engines: {node: '>=6'}
+  parent-module@1.0.1:
     dependencies:
       callsites: 3.1.0
 
-  /parse-entities@4.0.0:
-    resolution: {integrity: sha512-5nk9Fn03x3rEhGaX1FU6IDwG/k+GxLXlFAkgrbM1asuAFl3BhdQWvASaIsmwWypRNcZKHPYnIuOSfIWEyEQnPQ==}
+  parse-conflict-json@3.0.1:
     dependencies:
-      '@types/unist': 2.0.6
+      json-parse-even-better-errors: 3.0.2
+      just-diff: 6.0.2
+      just-diff-apply: 5.5.0
+
+  parse-entities@4.0.1:
+    dependencies:
+      '@types/unist': 2.0.11
       character-entities: 2.0.2
       character-entities-legacy: 3.0.0
       character-reference-invalid: 2.0.1
@@ -11283,207 +14706,122 @@ packages:
       is-alphanumerical: 2.0.1
       is-decimal: 2.0.1
       is-hexadecimal: 2.0.1
-    dev: false
 
-  /parse-json@4.0.0:
-    resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==}
-    engines: {node: '>=4'}
+  parse-json@4.0.0:
     dependencies:
       error-ex: 1.3.2
       json-parse-better-errors: 1.0.2
-    dev: true
 
-  /parse-json@5.2.0:
-    resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
-    engines: {node: '>=8'}
+  parse-json@5.2.0:
     dependencies:
       '@babel/code-frame': 7.23.5
       error-ex: 1.3.2
       json-parse-even-better-errors: 2.3.1
       lines-and-columns: 1.2.4
-    dev: true
 
-  /parse-latin@5.0.1:
-    resolution: {integrity: sha512-b/K8ExXaWC9t34kKeDV8kGXBkXZ1HCSAZRYE7HR14eA1GlXX5L8iWhs8USJNhQU9q5ci413jCKF0gOyovvyRBg==}
+  parse-latin@5.0.1:
     dependencies:
       nlcst-to-string: 3.1.1
       unist-util-modify-children: 3.1.1
       unist-util-visit-children: 2.0.2
 
-  /parse-path@7.0.0:
-    resolution: {integrity: sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==}
+  parse-latin@7.0.0:
+    dependencies:
+      '@types/nlcst': 2.0.3
+      '@types/unist': 3.0.3
+      nlcst-to-string: 4.0.0
+      unist-util-modify-children: 4.0.0
+      unist-util-visit-children: 3.0.0
+      vfile: 6.0.3
+
+  parse-path@7.0.0:
     dependencies:
       protocols: 2.0.1
-    dev: true
 
-  /parse-url@8.1.0:
-    resolution: {integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==}
+  parse-url@8.1.0:
     dependencies:
       parse-path: 7.0.0
-    dev: true
 
-  /parse5@7.1.2:
-    resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==}
+  parse5@7.2.0:
     dependencies:
       entities: 4.5.0
 
-  /path-browserify@1.0.1:
-    resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
-    dev: false
+  path-browserify@1.0.1: {}
 
-  /path-exists@3.0.0:
-    resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==}
-    engines: {node: '>=4'}
-    dev: true
+  path-exists@3.0.0: {}
 
-  /path-exists@4.0.0:
-    resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
-    engines: {node: '>=8'}
+  path-exists@4.0.0: {}
 
-  /path-is-absolute@1.0.1:
-    resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
-    engines: {node: '>=0.10.0'}
+  path-is-absolute@1.0.1: {}
 
-  /path-key@3.1.1:
-    resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
-    engines: {node: '>=8'}
+  path-key@3.1.1: {}
 
-  /path-key@4.0.0:
-    resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
-    engines: {node: '>=12'}
+  path-parse@1.0.7: {}
 
-  /path-parse@1.0.7:
-    resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+  path-scurry@1.11.1:
+    dependencies:
+      lru-cache: 10.4.3
+      minipass: 7.1.2
 
-  /path-scurry@1.10.1:
-    resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==}
-    engines: {node: '>=16 || 14 >=14.17'}
+  path-scurry@1.7.0:
     dependencies:
       lru-cache: 9.1.1
       minipass: 5.0.0
-    dev: true
 
-  /path-scurry@1.7.0:
-    resolution: {integrity: sha512-UkZUeDjczjYRE495+9thsgcVgsaCPkaw80slmfVFgllxY+IO8ubTsOpFVjDPROBqJdHfVPUFRHPBV/WciOVfWg==}
-    engines: {node: '>=16 || 14 >=14.17'}
-    dependencies:
-      lru-cache: 9.1.1
-      minipass: 5.0.0
-    dev: true
-
-  /path-to-regexp@6.2.1:
-    resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==}
-
-  /path-type@3.0.0:
-    resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==}
-    engines: {node: '>=4'}
+  path-type@3.0.0:
     dependencies:
       pify: 3.0.0
-    dev: true
 
-  /path-type@4.0.0:
-    resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
-    engines: {node: '>=8'}
-    dev: true
+  path-type@4.0.0: {}
 
-  /pathe@1.1.1:
-    resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==}
-    dev: true
+  pathe@1.1.2: {}
 
-  /pathval@1.1.1:
-    resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
-    dev: true
+  pathval@2.0.0: {}
 
-  /peggy@3.0.2:
-    resolution: {integrity: sha512-n7chtCbEoGYRwZZ0i/O3t1cPr6o+d9Xx4Zwy2LYfzv0vjchMBU0tO+qYYyvZloBPcgRgzYvALzGWHe609JjEpg==}
-    engines: {node: '>=14'}
-    hasBin: true
+  peggy@3.0.2:
     dependencies:
       commander: 10.0.1
       source-map-generator: 0.8.0
-    dev: true
 
-  /performance-now@2.1.0:
-    resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==}
-    dev: false
+  performance-now@2.1.0: {}
 
-  /periscopic@3.1.0:
-    resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==}
-    dependencies:
-      '@types/estree': 1.0.0
-      estree-walker: 3.0.3
-      is-reference: 3.0.1
-    dev: false
+  picocolors@1.0.0: {}
 
-  /picocolors@1.0.0:
-    resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
+  picocolors@1.1.1: {}
 
-  /picomatch@2.3.1:
-    resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
-    engines: {node: '>=8.6'}
+  picomatch@2.3.1: {}
 
-  /pify@2.3.0:
-    resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
-    engines: {node: '>=0.10.0'}
+  picomatch@4.0.2: {}
 
-  /pify@3.0.0:
-    resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==}
-    engines: {node: '>=4'}
-    dev: true
+  pify@2.3.0: {}
 
-  /pify@4.0.1:
-    resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
-    engines: {node: '>=6'}
+  pify@3.0.0: {}
 
-  /pify@5.0.0:
-    resolution: {integrity: sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==}
-    engines: {node: '>=10'}
-    dev: true
+  pify@4.0.1: {}
 
-  /pirates@4.0.5:
-    resolution: {integrity: sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==}
-    engines: {node: '>= 6'}
-    dev: false
+  pify@5.0.0: {}
 
-  /pkg-dir@4.2.0:
-    resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
-    engines: {node: '>=8'}
+  pirates@4.0.5: {}
+
+  pkg-dir@4.2.0:
     dependencies:
       find-up: 4.1.0
 
-  /pkg-fetch@3.4.2:
-    resolution: {integrity: sha512-0+uijmzYcnhC0hStDjm/cl2VYdrmVVBpe7Q8k9YBojxmR5tG8mvR9/nooQq3QSXiQqORDVOTY3XqMEqJVIzkHA==}
-    hasBin: true
+  pkg-fetch@3.4.2(encoding@0.1.13):
     dependencies:
       chalk: 4.1.2
       fs-extra: 9.1.0
       https-proxy-agent: 5.0.1
-      node-fetch: 2.6.8
+      node-fetch: 2.6.8(encoding@0.1.13)
       progress: 2.0.3
-      semver: 7.3.8
+      semver: 7.6.3
       tar-fs: 2.1.1
       yargs: 16.2.0
     transitivePeerDependencies:
       - encoding
       - supports-color
-    dev: true
 
-  /pkg-types@1.0.3:
-    resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==}
-    dependencies:
-      jsonc-parser: 3.2.0
-      mlly: 1.4.0
-      pathe: 1.1.1
-    dev: true
-
-  /pkg@5.8.1:
-    resolution: {integrity: sha512-CjBWtFStCfIiT4Bde9QpJy0KeH19jCfwZRJqHFDFXfhUklCx8JoFmMj3wgnEYIwGmZVNkhsStPHEOnrtrQhEXA==}
-    hasBin: true
-    peerDependencies:
-      node-notifier: '>=9.0.1'
-    peerDependenciesMeta:
-      node-notifier:
-        optional: true
+  pkg@5.8.1(encoding@0.1.13):
     dependencies:
       '@babel/generator': 7.18.2
       '@babel/parser': 7.18.4
@@ -11495,116 +14833,84 @@ packages:
       is-core-module: 2.9.0
       minimist: 1.2.7
       multistream: 4.1.0
-      pkg-fetch: 3.4.2
+      pkg-fetch: 3.4.2(encoding@0.1.13)
       prebuild-install: 7.1.1
       resolve: 1.22.2
       stream-meter: 1.0.4
     transitivePeerDependencies:
       - encoding
       - supports-color
-    dev: true
 
-  /postcss-import@15.1.0(postcss@8.4.32):
-    resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
-    engines: {node: '>=14.0.0'}
-    peerDependencies:
-      postcss: ^8.0.0
+  possible-typed-array-names@1.0.0: {}
+
+  postcss-import@15.1.0(postcss@8.4.32):
     dependencies:
       postcss: 8.4.32
       postcss-value-parser: 4.2.0
       read-cache: 1.0.0
       resolve: 1.22.8
-    dev: false
 
-  /postcss-js@4.0.1(postcss@8.4.32):
-    resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
-    engines: {node: ^12 || ^14 || >= 16}
-    peerDependencies:
-      postcss: ^8.4.21
+  postcss-js@4.0.1(postcss@8.4.32):
     dependencies:
       camelcase-css: 2.0.1
       postcss: 8.4.32
-    dev: false
 
-  /postcss-load-config@4.0.2(postcss@8.4.32):
-    resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==}
-    engines: {node: '>= 14'}
-    peerDependencies:
-      postcss: '>=8.0.9'
-      ts-node: '>=9.0.0'
-    peerDependenciesMeta:
-      postcss:
-        optional: true
-      ts-node:
-        optional: true
+  postcss-load-config@4.0.2(postcss@8.4.32):
     dependencies:
       lilconfig: 3.0.0
-      postcss: 8.4.32
       yaml: 2.3.4
-    dev: false
+    optionalDependencies:
+      postcss: 8.4.32
 
-  /postcss-nested@6.0.1(postcss@8.4.32):
-    resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==}
-    engines: {node: '>=12.0'}
-    peerDependencies:
-      postcss: ^8.2.14
+  postcss-load-config@4.0.2(postcss@8.4.47):
+    dependencies:
+      lilconfig: 3.0.0
+      yaml: 2.3.4
+    optionalDependencies:
+      postcss: 8.4.47
+
+  postcss-nested@6.0.1(postcss@8.4.32):
     dependencies:
       postcss: 8.4.32
       postcss-selector-parser: 6.0.11
-    dev: false
 
-  /postcss-selector-parser@6.0.10:
-    resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==}
-    engines: {node: '>=4'}
+  postcss-selector-parser@6.0.10:
     dependencies:
       cssesc: 3.0.0
       util-deprecate: 1.0.2
-    dev: false
 
-  /postcss-selector-parser@6.0.11:
-    resolution: {integrity: sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==}
-    engines: {node: '>=4'}
+  postcss-selector-parser@6.0.11:
     dependencies:
       cssesc: 3.0.0
       util-deprecate: 1.0.2
-    dev: false
 
-  /postcss-value-parser@4.2.0:
-    resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
-    dev: false
+  postcss-selector-parser@6.1.2:
+    dependencies:
+      cssesc: 3.0.0
+      util-deprecate: 1.0.2
 
-  /postcss-values-parser@6.0.2(postcss@8.4.32):
-    resolution: {integrity: sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==}
-    engines: {node: '>=10'}
-    peerDependencies:
-      postcss: ^8.2.9
+  postcss-value-parser@4.2.0: {}
+
+  postcss-values-parser@6.0.2(postcss@8.4.47):
     dependencies:
       color-name: 1.1.4
       is-url-superb: 4.0.0
-      postcss: 8.4.32
+      postcss: 8.4.47
       quote-unquote: 1.0.0
-    dev: true
 
-  /postcss@8.4.32:
-    resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==}
-    engines: {node: ^10 || ^12 || >=14}
+  postcss@8.4.32:
     dependencies:
       nanoid: 3.3.7
       picocolors: 1.0.0
       source-map-js: 1.0.2
 
-  /postcss@8.4.38:
-    resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==}
-    engines: {node: ^10 || ^12 || >=14}
+  postcss@8.4.47:
     dependencies:
       nanoid: 3.3.7
-      picocolors: 1.0.0
-      source-map-js: 1.2.0
+      picocolors: 1.1.1
+      source-map-js: 1.2.1
 
-  /prebuild-install@7.1.1:
-    resolution: {integrity: sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==}
-    engines: {node: '>=10'}
-    hasBin: true
+  prebuild-install@7.1.1:
     dependencies:
       detect-libc: 2.0.1
       expand-template: 2.0.3
@@ -11618,12 +14924,8 @@ packages:
       simple-get: 4.0.1
       tar-fs: 2.1.1
       tunnel-agent: 0.6.0
-    dev: true
 
-  /precinct@11.0.5:
-    resolution: {integrity: sha512-oHSWLC8cL/0znFhvln26D14KfCQFFn4KOLSw6hmLhd+LQ2SKt9Ljm89but76Pc7flM9Ty1TnXyrA2u16MfRV3w==}
-    engines: {node: ^14.14.0 || >=16.0.0}
-    hasBin: true
+  precinct@11.0.5:
     dependencies:
       '@dependents/detective-less': 4.1.0
       commander: 10.0.1
@@ -11634,321 +14936,178 @@ packages:
       detective-sass: 5.0.3
       detective-scss: 4.0.3
       detective-stylus: 4.0.0
-      detective-typescript: 11.1.0
+      detective-typescript: 11.2.0
       module-definition: 5.0.1
       node-source-walk: 6.0.2
     transitivePeerDependencies:
       - supports-color
-    dev: true
 
-  /preferred-pm@3.1.2:
-    resolution: {integrity: sha512-nk7dKrcW8hfCZ4H6klWcdRknBOXWzNQByJ0oJyX97BOupsYD+FzLS4hflgEu/uPUEHZCuRfMxzCBsuWd7OzT8Q==}
-    engines: {node: '>=10'}
+  preferred-pm@4.0.0:
     dependencies:
-      find-up: 5.0.0
+      find-up-simple: 1.0.0
       find-yarn-workspace-root2: 1.2.16
-      path-exists: 4.0.0
-      which-pm: 2.0.0
+      which-pm: 3.0.0
 
-  /prelude-ls@1.2.1:
-    resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
-    engines: {node: '>= 0.8.0'}
+  prelude-ls@1.2.1: {}
 
-  /prettier@3.1.1:
-    resolution: {integrity: sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==}
-    engines: {node: '>=14'}
-    hasBin: true
-    dev: true
+  prettier@3.3.3: {}
 
-  /pretty-bytes@5.6.0:
-    resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==}
-    engines: {node: '>=6'}
-    dev: true
+  pretty-bytes@5.6.0: {}
 
-  /pretty-bytes@6.1.1:
-    resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==}
-    engines: {node: ^14.13.1 || >=16.0.0}
-    dev: true
+  pretty-bytes@6.1.1: {}
 
-  /pretty-format@29.7.0:
-    resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
-    engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+  pretty-format@29.7.0:
     dependencies:
       '@jest/schemas': 29.6.3
       ansi-styles: 5.2.0
-      react-is: 18.2.0
-    dev: true
+      react-is: 18.3.1
 
-  /prismjs@1.29.0:
-    resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==}
-    engines: {node: '>=6'}
+  prismjs@1.29.0: {}
 
-  /probe-image-size@7.2.3:
-    resolution: {integrity: sha512-HubhG4Rb2UH8YtV4ba0Vp5bQ7L78RTONYu/ujmCu5nBI8wGv24s4E9xSKBi0N1MowRpxk76pFCpJtW0KPzOK0w==}
-    dependencies:
-      lodash.merge: 4.6.2
-      needle: 2.9.1
-      stream-parser: 0.3.1
-    transitivePeerDependencies:
-      - supports-color
+  proc-log@4.2.0: {}
 
-  /proc-log@3.0.0:
-    resolution: {integrity: sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
-    dev: true
+  process-nextick-args@2.0.1: {}
 
-  /process-nextick-args@2.0.1:
-    resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
+  proggy@2.0.0: {}
 
-  /progress@2.0.3:
-    resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
-    engines: {node: '>=0.4.0'}
-    dev: true
+  progress@2.0.3: {}
 
-  /promise-inflight@1.0.1:
-    resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==}
-    peerDependencies:
-      bluebird: '*'
-    peerDependenciesMeta:
-      bluebird:
-        optional: true
-    dev: true
+  promise-all-reject-late@1.0.1: {}
 
-  /promise-retry@2.0.1:
-    resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==}
-    engines: {node: '>=10'}
+  promise-call-limit@3.0.2: {}
+
+  promise-inflight@1.0.1: {}
+
+  promise-retry@2.0.1:
     dependencies:
       err-code: 2.0.3
       retry: 0.12.0
-    dev: true
 
-  /prompts@2.4.2:
-    resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
-    engines: {node: '>= 6'}
+  prompts@2.4.2:
     dependencies:
       kleur: 3.0.3
       sisteransi: 1.0.5
 
-  /promzard@1.0.0:
-    resolution: {integrity: sha512-KQVDEubSUHGSt5xLakaToDFrSoZhStB8dXLzk2xvwR67gJktrHFvpR63oZgHyK19WKbHFLXJqCPXdVR3aBP8Ig==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+  promzard@1.0.2:
     dependencies:
-      read: 2.1.0
-    dev: true
+      read: 3.0.1
 
-  /property-information@6.2.0:
-    resolution: {integrity: sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==}
+  property-information@6.5.0: {}
 
-  /protocols@2.0.1:
-    resolution: {integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==}
-    dev: true
+  protocols@2.0.1: {}
 
-  /proxy-from-env@1.1.0:
-    resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
-    dev: true
+  proxy-from-env@1.1.0: {}
 
-  /pump@3.0.0:
-    resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==}
+  pump@3.0.0:
     dependencies:
       end-of-stream: 1.4.4
       once: 1.4.0
-    dev: true
 
-  /punycode@2.3.0:
-    resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
-    engines: {node: '>=6'}
+  punycode.js@2.3.1: {}
 
-  /punycode@2.3.1:
-    resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
-    engines: {node: '>=6'}
-    dev: true
+  punycode@2.3.1: {}
 
-  /queue-microtask@1.2.3:
-    resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+  queue-microtask@1.2.3: {}
 
-  /quick-lru@4.0.1:
-    resolution: {integrity: sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==}
-    engines: {node: '>=8'}
-    dev: true
+  quick-lru@4.0.1: {}
 
-  /quote-unquote@1.0.0:
-    resolution: {integrity: sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==}
-    dev: true
+  quote-unquote@1.0.0: {}
 
-  /raf-loop@1.1.3:
-    resolution: {integrity: sha512-fcIuuIdjbD6OB0IFw4d+cjqdrzDorKkIpwOiSnfU4Tht5PTFiJutR8hnCOGslYqZDyIzwpF5WnwbnTTuo9uUUA==}
+  raf-loop@1.1.3:
     dependencies:
       events: 1.1.1
       inherits: 2.0.4
       raf: 3.4.1
       right-now: 1.0.0
-    dev: false
 
-  /raf@3.4.1:
-    resolution: {integrity: sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==}
+  raf@3.4.1:
     dependencies:
       performance-now: 2.1.0
-    dev: false
 
-  /rambda@7.4.0:
-    resolution: {integrity: sha512-A9hihu7dUTLOUCM+I8E61V4kRXnN4DwYeK0DwCBydC1MqNI1PidyAtbtpsJlBBzK4icSctEcCQ1bGcLpBuETUQ==}
-    dev: false
+  rambda@7.4.0: {}
 
-  /randombytes@2.1.0:
-    resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+  randombytes@2.1.0:
     dependencies:
       safe-buffer: 5.2.1
-    dev: true
 
-  /rc@1.2.8:
-    resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
-    hasBin: true
+  rc@1.2.8:
     dependencies:
       deep-extend: 0.6.0
       ini: 1.3.8
-      minimist: 1.2.7
+      minimist: 1.2.8
       strip-json-comments: 2.0.1
-    dev: true
 
-  /react-dom@18.2.0(react@18.2.0):
-    resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==}
-    peerDependencies:
-      react: ^18.2.0
+  react-dom@18.3.1(react@18.3.1):
     dependencies:
       loose-envify: 1.4.0
-      react: 18.2.0
-      scheduler: 0.23.0
-    dev: false
+      react: 18.3.1
+      scheduler: 0.23.2
 
-  /react-hook-inview@4.5.0(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-Hm61BK32/K2Cc3bjBe2bQkndHbQP6NhHvWVX7zYitaitB6T28uUV+wlgxbXU9twxUt7+17HyHq6aezpMUCijQQ==}
-    peerDependencies:
-      react: ^16.8.0 || ^17.0.0 || ^18.0.0
-      react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0
+  react-hook-inview@4.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
     dependencies:
-      react: 18.2.0
-      react-dom: 18.2.0(react@18.2.0)
-    dev: false
+      react: 18.3.1
+      react-dom: 18.3.1(react@18.3.1)
 
-  /react-is@18.2.0:
-    resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
-    dev: true
+  react-is@18.3.1: {}
 
-  /react-lite-youtube-embed@2.4.0(react-dom@18.2.0)(react@18.2.0):
-    resolution: {integrity: sha512-Xo6cM1zPlROvvM97JkqQIoXstlQDaC4+DawmM7BB7Hh1cXrkBHEGq1iJlQxBTUWAUklmpcC7ph7qg7CztXtABQ==}
-    peerDependencies:
-      react: '>=18.2.0'
-      react-dom: '>=18.2.0'
+  react-lite-youtube-embed@2.4.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
     dependencies:
-      react: 18.2.0
-      react-dom: 18.2.0(react@18.2.0)
-    dev: false
+      react: 18.3.1
+      react-dom: 18.3.1(react@18.3.1)
 
-  /react-refresh@0.14.0:
-    resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==}
-    engines: {node: '>=0.10.0'}
-    dev: false
+  react-refresh@0.14.2: {}
 
-  /react@18.2.0:
-    resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
-    engines: {node: '>=0.10.0'}
+  react@18.3.1:
     dependencies:
       loose-envify: 1.4.0
-    dev: false
 
-  /read-cache@1.0.0:
-    resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
+  read-cache@1.0.0:
     dependencies:
       pify: 2.3.0
-    dev: false
 
-  /read-cmd-shim@4.0.0:
-    resolution: {integrity: sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
-    dev: true
+  read-cmd-shim@4.0.0: {}
 
-  /read-package-json-fast@3.0.2:
-    resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+  read-package-json-fast@3.0.2:
     dependencies:
-      json-parse-even-better-errors: 3.0.0
-      npm-normalize-package-bin: 3.0.0
-    dev: true
+      json-parse-even-better-errors: 3.0.2
+      npm-normalize-package-bin: 3.0.1
 
-  /read-package-json@6.0.4:
-    resolution: {integrity: sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
-    dependencies:
-      glob: 10.2.2
-      json-parse-even-better-errors: 3.0.0
-      normalize-package-data: 5.0.0
-      npm-normalize-package-bin: 3.0.0
-    dev: true
-
-  /read-package-json@7.0.0:
-    resolution: {integrity: sha512-uL4Z10OKV4p6vbdvIXB+OzhInYtIozl/VxUBPgNkBuUi2DeRonnuspmaVAMcrkmfjKGNmRndyQAbE7/AmzGwFg==}
-    engines: {node: ^16.14.0 || >=18.0.0}
-    dependencies:
-      glob: 10.2.2
-      json-parse-even-better-errors: 3.0.0
-      normalize-package-data: 6.0.0
-      npm-normalize-package-bin: 3.0.0
-    dev: true
-
-  /read-pkg-up@3.0.0:
-    resolution: {integrity: sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==}
-    engines: {node: '>=4'}
+  read-pkg-up@3.0.0:
     dependencies:
       find-up: 2.1.0
       read-pkg: 3.0.0
-    dev: true
 
-  /read-pkg-up@7.0.1:
-    resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
-    engines: {node: '>=8'}
+  read-pkg-up@7.0.1:
     dependencies:
       find-up: 4.1.0
       read-pkg: 5.2.0
       type-fest: 0.8.1
-    dev: true
 
-  /read-pkg@3.0.0:
-    resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==}
-    engines: {node: '>=4'}
+  read-pkg@3.0.0:
     dependencies:
       load-json-file: 4.0.0
       normalize-package-data: 2.5.0
       path-type: 3.0.0
-    dev: true
 
-  /read-pkg@5.2.0:
-    resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==}
-    engines: {node: '>=8'}
+  read-pkg@5.2.0:
     dependencies:
       '@types/normalize-package-data': 2.4.1
       normalize-package-data: 2.5.0
       parse-json: 5.2.0
       type-fest: 0.6.0
-    dev: true
 
-  /read@2.1.0:
-    resolution: {integrity: sha512-bvxi1QLJHcaywCAEsAk4DG3nVoqiY2Csps3qzWalhj5hFqRn1d/OixkFXtLO1PrgHUcAP0FNaSY/5GYNfENFFQ==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+  read@3.0.1:
     dependencies:
       mute-stream: 1.0.0
-    dev: true
 
-  /readable-stream@1.1.14:
-    resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==}
+  readable-stream@1.1.14:
     dependencies:
       core-util-is: 1.0.3
       inherits: 2.0.4
       isarray: 0.0.1
       string_decoder: 0.10.31
-    dev: false
 
-  /readable-stream@2.3.7:
-    resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==}
+  readable-stream@2.3.7:
     dependencies:
       core-util-is: 1.0.3
       inherits: 2.0.4
@@ -11958,120 +15117,110 @@ packages:
       string_decoder: 1.1.1
       util-deprecate: 1.0.2
 
-  /readable-stream@3.6.0:
-    resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==}
-    engines: {node: '>= 6'}
+  readable-stream@3.6.0:
     dependencies:
       inherits: 2.0.4
       string_decoder: 1.3.0
       util-deprecate: 1.0.2
 
-  /readdirp@3.6.0:
-    resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
-    engines: {node: '>=8.10.0'}
+  readdirp@3.6.0:
     dependencies:
       picomatch: 2.3.1
 
-  /redent@3.0.0:
-    resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==}
-    engines: {node: '>=8'}
+  recma-build-jsx@1.0.0:
+    dependencies:
+      '@types/estree': 1.0.6
+      estree-util-build-jsx: 3.0.1
+      vfile: 6.0.3
+
+  recma-jsx@1.0.0(acorn@8.13.0):
+    dependencies:
+      acorn-jsx: 5.3.2(acorn@8.13.0)
+      estree-util-to-js: 2.0.0
+      recma-parse: 1.0.0
+      recma-stringify: 1.0.0
+      unified: 11.0.5
+    transitivePeerDependencies:
+      - acorn
+
+  recma-parse@1.0.0:
+    dependencies:
+      '@types/estree': 1.0.6
+      esast-util-from-js: 2.0.1
+      unified: 11.0.5
+      vfile: 6.0.3
+
+  recma-stringify@1.0.0:
+    dependencies:
+      '@types/estree': 1.0.6
+      estree-util-to-js: 2.0.0
+      unified: 11.0.5
+      vfile: 6.0.3
+
+  redent@3.0.0:
     dependencies:
       indent-string: 4.0.0
       strip-indent: 3.0.0
-    dev: true
 
-  /reduce-extract@1.0.0:
-    resolution: {integrity: sha512-QF8vjWx3wnRSL5uFMyCjDeDc5EBMiryoT9tz94VvgjKfzecHAVnqmXAwQDcr7X4JmLc2cjkjFGCVzhMqDjgR9g==}
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      test-value: 1.1.0
-    dev: true
+  reduce-flatten@1.0.1: {}
 
-  /reduce-flatten@1.0.1:
-    resolution: {integrity: sha512-j5WfFJfc9CoXv/WbwVLHq74i/hdTUpy+iNC534LxczMRP67vJeK3V9JOdnL0N1cIRbn9mYhE2yVjvvKXDxvNXQ==}
-    engines: {node: '>=0.10.0'}
-    dev: true
+  reduce-flatten@3.0.1: {}
 
-  /reduce-flatten@3.0.1:
-    resolution: {integrity: sha512-bYo+97BmUUOzg09XwfkwALt4PQH1M5L0wzKerBt6WLm3Fhdd43mMS89HiT1B9pJIqko/6lWx3OnV4J9f2Kqp5Q==}
-    engines: {node: '>=8'}
-    dev: true
+  reduce-unique@2.0.1: {}
 
-  /reduce-unique@2.0.1:
-    resolution: {integrity: sha512-x4jH/8L1eyZGR785WY+ePtyMNhycl1N2XOLxhCbzZFaqF4AXjLzqSxa2UHgJ2ZVR/HHyPOvl1L7xRnW8ye5MdA==}
-    engines: {node: '>=6'}
-    dev: true
-
-  /reduce-without@1.0.1:
-    resolution: {integrity: sha512-zQv5y/cf85sxvdrKPlfcRzlDn/OqKFThNimYmsS3flmkioKvkUGn2Qg9cJVoQiEvdxFGLE0MQER/9fZ9sUqdxg==}
-    engines: {node: '>=0.10.0'}
+  reduce-without@1.0.1:
     dependencies:
       test-value: 2.1.0
-    dev: true
 
-  /regenerate-unicode-properties@10.1.1:
-    resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==}
-    engines: {node: '>=4'}
+  regenerate-unicode-properties@10.2.0:
     dependencies:
       regenerate: 1.4.2
-    dev: true
 
-  /regenerate@1.4.2:
-    resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==}
-    dev: true
+  regenerate@1.4.2: {}
 
-  /regenerator-runtime@0.13.11:
-    resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==}
-    dev: false
+  regenerator-runtime@0.13.11: {}
 
-  /regenerator-runtime@0.14.1:
-    resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+  regenerator-runtime@0.14.1: {}
 
-  /regenerator-transform@0.15.2:
-    resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==}
+  regenerator-transform@0.15.2:
     dependencies:
-      '@babel/runtime': 7.24.1
-    dev: true
+      '@babel/runtime': 7.25.7
 
-  /regexp.prototype.flags@1.5.1:
-    resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==}
-    engines: {node: '>= 0.4'}
+  regex@4.3.3: {}
+
+  regexp.prototype.flags@1.5.1:
     dependencies:
       call-bind: 1.0.5
       define-properties: 1.2.1
       set-function-name: 2.0.1
-    dev: true
 
-  /regexpp@3.2.0:
-    resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==}
-    engines: {node: '>=8'}
-    dev: false
-
-  /regexpu-core@5.3.2:
-    resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==}
-    engines: {node: '>=4'}
+  regexp.prototype.flags@1.5.3:
+    dependencies:
+      call-bind: 1.0.7
+      define-properties: 1.2.1
+      es-errors: 1.3.0
+      set-function-name: 2.0.2
+
+  regexpp@3.2.0: {}
+
+  regexpu-core@6.1.1:
     dependencies:
-      '@babel/regjsgen': 0.8.0
       regenerate: 1.4.2
-      regenerate-unicode-properties: 10.1.1
-      regjsparser: 0.9.1
+      regenerate-unicode-properties: 10.2.0
+      regjsgen: 0.8.0
+      regjsparser: 0.11.1
       unicode-match-property-ecmascript: 2.0.0
-      unicode-match-property-value-ecmascript: 2.1.0
-    dev: true
+      unicode-match-property-value-ecmascript: 2.2.0
 
-  /regjsparser@0.9.1:
-    resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==}
-    hasBin: true
+  regjsgen@0.8.0: {}
+
+  regjsparser@0.11.1:
     dependencies:
-      jsesc: 0.5.0
-    dev: true
+      jsesc: 3.0.2
 
-  /regl@1.7.0:
-    resolution: {integrity: sha512-bEAtp/qrtKucxXSJkD4ebopFZYP0q1+3Vb2WECWv/T8yQEgKxDxJ7ztO285tAMaYZVR6mM1GgI6CCn8FROtL1w==}
-    dev: false
+  regl@1.7.0: {}
 
-  /rehype-autolink-headings@7.1.0:
-    resolution: {integrity: sha512-rItO/pSdvnvsP4QRB1pmPiNHUskikqtPojZKJPPPAVx9Hj8i8TwMBhofrrAYRhYOOBZH9tgmG5lPqDLuIWPWmw==}
+  rehype-autolink-headings@7.1.0:
     dependencies:
       '@types/hast': 3.0.2
       '@ungap/structured-clone': 1.2.0
@@ -12079,1055 +15228,742 @@ packages:
       hast-util-is-element: 3.0.0
       unified: 11.0.4
       unist-util-visit: 5.0.0
-    dev: false
 
-  /rehype-parse@9.0.0:
-    resolution: {integrity: sha512-WG7nfvmWWkCR++KEkZevZb/uw41E8TsH4DsY9UxsTbIXCVGbAs4S+r8FrQ+OtH5EEQAs+5UxKC42VinkmpA1Yw==}
+  rehype-parse@9.0.1:
     dependencies:
-      '@types/hast': 3.0.2
-      hast-util-from-html: 2.0.1
-      unified: 11.0.4
+      '@types/hast': 3.0.4
+      hast-util-from-html: 2.0.3
+      unified: 11.0.5
 
-  /rehype-raw@7.0.0:
-    resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==}
+  rehype-raw@7.0.0:
     dependencies:
-      '@types/hast': 3.0.2
+      '@types/hast': 3.0.4
       hast-util-raw: 9.0.1
-      vfile: 6.0.1
+      vfile: 6.0.3
 
-  /rehype-slug@6.0.0:
-    resolution: {integrity: sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==}
+  rehype-recma@1.0.0:
+    dependencies:
+      '@types/estree': 1.0.6
+      '@types/hast': 3.0.4
+      hast-util-to-estree: 3.1.0
+    transitivePeerDependencies:
+      - supports-color
+
+  rehype-slug@6.0.0:
     dependencies:
       '@types/hast': 3.0.2
       github-slugger: 2.0.0
       hast-util-heading-rank: 3.0.0
       hast-util-to-string: 3.0.0
       unist-util-visit: 5.0.0
-    dev: false
 
-  /rehype-stringify@10.0.0:
-    resolution: {integrity: sha512-1TX1i048LooI9QoecrXy7nGFFbFSufxVRAfc6Y9YMRAi56l+oB0zP51mLSV312uRuvVLPV1opSlJmslozR1XHQ==}
+  rehype-stringify@10.0.1:
     dependencies:
-      '@types/hast': 3.0.2
-      hast-util-to-html: 9.0.0
-      unified: 11.0.4
+      '@types/hast': 3.0.4
+      hast-util-to-html: 9.0.3
+      unified: 11.0.5
 
-  /rehype-urls@1.2.0:
-    resolution: {integrity: sha512-+ygQd999ts0DxhTqttYmH0w0jK2ysE5lLjaJkSI4xd63XUB+g+TYXZtwXngr38QDMIVizquB2Bo35JNVggCL3A==}
+  rehype-urls@1.2.0:
     dependencies:
       hast-util-has-property: 1.0.4
       stdopt: 2.2.0
       unist-util-visit: 1.4.1
-    dev: false
 
-  /rehype@13.0.1:
-    resolution: {integrity: sha512-AcSLS2mItY+0fYu9xKxOu1LhUZeBZZBx8//5HKzF+0XP+eP8+6a5MXn2+DW2kfXR6Dtp1FEXMVrjyKAcvcU8vg==}
+  rehype@13.0.2:
     dependencies:
-      '@types/hast': 3.0.2
-      rehype-parse: 9.0.0
-      rehype-stringify: 10.0.0
-      unified: 11.0.4
+      '@types/hast': 3.0.4
+      rehype-parse: 9.0.1
+      rehype-stringify: 10.0.1
+      unified: 11.0.5
 
-  /remark-gfm@4.0.0:
-    resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==}
+  remark-gfm@4.0.0:
     dependencies:
-      '@types/mdast': 4.0.2
+      '@types/mdast': 4.0.4
       mdast-util-gfm: 3.0.0
       micromark-extension-gfm: 3.0.0
       remark-parse: 11.0.0
       remark-stringify: 11.0.0
-      unified: 11.0.4
+      unified: 11.0.5
     transitivePeerDependencies:
       - supports-color
 
-  /remark-mdx@3.0.0:
-    resolution: {integrity: sha512-O7yfjuC6ra3NHPbRVxfflafAj3LTwx3b73aBvkEFU5z4PsD6FD4vrqJAkE5iNGLz71GdjXfgRqm3SQ0h0VuE7g==}
+  remark-mdx@3.1.0:
     dependencies:
       mdast-util-mdx: 3.0.0
       micromark-extension-mdxjs: 3.0.0
     transitivePeerDependencies:
       - supports-color
-    dev: false
 
-  /remark-parse@11.0.0:
-    resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==}
+  remark-parse@11.0.0:
     dependencies:
-      '@types/mdast': 4.0.2
-      mdast-util-from-markdown: 2.0.0
+      '@types/mdast': 4.0.4
+      mdast-util-from-markdown: 2.0.1
       micromark-util-types: 2.0.0
-      unified: 11.0.4
+      unified: 11.0.5
     transitivePeerDependencies:
       - supports-color
 
-  /remark-rehype@11.0.0:
-    resolution: {integrity: sha512-vx8x2MDMcxuE4lBmQ46zYUDfcFMmvg80WYX+UNLeG6ixjdCCLcw1lrgAukwBTuOFsS78eoAedHGn9sNM0w7TPw==}
+  remark-rehype@11.1.1:
     dependencies:
-      '@types/hast': 3.0.2
-      '@types/mdast': 4.0.2
-      mdast-util-to-hast: 13.0.2
-      unified: 11.0.4
-      vfile: 6.0.1
+      '@types/hast': 3.0.4
+      '@types/mdast': 4.0.4
+      mdast-util-to-hast: 13.2.0
+      unified: 11.0.5
+      vfile: 6.0.3
 
-  /remark-smartypants@2.0.0:
-    resolution: {integrity: sha512-Rc0VDmr/yhnMQIz8n2ACYXlfw/P/XZev884QU1I5u+5DgJls32o97Vc1RbK3pfumLsJomS2yy8eT4Fxj/2MDVA==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+  remark-smartypants@2.1.0:
     dependencies:
       retext: 8.1.0
       retext-smartypants: 5.2.0
-      unist-util-visit: 4.1.2
+      unist-util-visit: 5.0.0
 
-  /remark-stringify@11.0.0:
-    resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==}
+  remark-smartypants@3.0.2:
     dependencies:
-      '@types/mdast': 4.0.2
-      mdast-util-to-markdown: 2.1.0
-      unified: 11.0.4
+      retext: 9.0.0
+      retext-smartypants: 6.2.0
+      unified: 11.0.5
+      unist-util-visit: 5.0.0
 
-  /remark-toc@9.0.0:
-    resolution: {integrity: sha512-KJ9txbo33GjDAV1baHFze7ij4G8c7SGYoY8Kzsm2gzFpbhL/bSoVpMMzGa3vrNDSWASNd/3ppAqL7cP2zD6JIA==}
+  remark-stringify@11.0.0:
+    dependencies:
+      '@types/mdast': 4.0.4
+      mdast-util-to-markdown: 2.1.0
+      unified: 11.0.5
+
+  remark-toc@9.0.0:
     dependencies:
       '@types/mdast': 4.0.2
       mdast-util-toc: 7.0.0
-    dev: false
 
-  /remove-trailing-separator@1.1.0:
-    resolution: {integrity: sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==}
-    dev: false
+  remove-trailing-separator@1.1.0: {}
 
-  /replace-ext@1.0.1:
-    resolution: {integrity: sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==}
-    engines: {node: '>= 0.10'}
-    dev: false
+  replace-ext@1.0.1: {}
 
-  /require-directory@2.1.1:
-    resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
-    engines: {node: '>=0.10.0'}
+  require-directory@2.1.1: {}
 
-  /require-from-string@2.0.2:
-    resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
-    engines: {node: '>=0.10.0'}
-    dev: true
+  require-from-string@2.0.2: {}
 
-  /require-main-filename@2.0.0:
-    resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==}
-    dev: false
+  require-main-filename@2.0.0: {}
 
-  /requirejs-config-file@4.0.0:
-    resolution: {integrity: sha512-jnIre8cbWOyvr8a5F2KuqBnY+SDA4NXr/hzEZJG79Mxm2WiFQz2dzhC8ibtPJS7zkmBEl1mxSwp5HhC1W4qpxw==}
-    engines: {node: '>=10.13.0'}
+  requirejs-config-file@4.0.0:
     dependencies:
       esprima: 4.0.1
       stringify-object: 3.3.0
-    dev: true
 
-  /requirejs@2.3.6:
-    resolution: {integrity: sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==}
-    engines: {node: '>=0.4.0'}
-    hasBin: true
-    dev: true
+  requirejs@2.3.7: {}
 
-  /requizzle@0.2.4:
-    resolution: {integrity: sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==}
+  requizzle@0.2.4:
     dependencies:
       lodash: 4.17.21
-    dev: true
 
-  /resolve-cwd@3.0.0:
-    resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==}
-    engines: {node: '>=8'}
+  resolve-cwd@3.0.0:
     dependencies:
       resolve-from: 5.0.0
-    dev: true
 
-  /resolve-dependency-path@3.0.2:
-    resolution: {integrity: sha512-Tz7zfjhLfsvR39ADOSk9us4421J/1ztVBo4rWUkF38hgHK5m0OCZ3NxFVpqHRkjctnwVa15igEUHFJp8MCS7vA==}
-    engines: {node: '>=14'}
-    dev: true
+  resolve-dependency-path@3.0.2: {}
 
-  /resolve-from@4.0.0:
-    resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
-    engines: {node: '>=4'}
+  resolve-from@4.0.0: {}
 
-  /resolve-from@5.0.0:
-    resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
-    engines: {node: '>=8'}
-    dev: true
+  resolve-from@5.0.0: {}
 
-  /resolve@1.22.2:
-    resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==}
-    hasBin: true
+  resolve@1.22.2:
     dependencies:
-      is-core-module: 2.11.0
+      is-core-module: 2.15.1
       path-parse: 1.0.7
       supports-preserve-symlinks-flag: 1.0.0
 
-  /resolve@1.22.8:
-    resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
-    hasBin: true
+  resolve@1.22.8:
     dependencies:
-      is-core-module: 2.13.1
+      is-core-module: 2.15.1
       path-parse: 1.0.7
       supports-preserve-symlinks-flag: 1.0.0
 
-  /restore-cursor@3.1.0:
-    resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
-    engines: {node: '>=8'}
-    dependencies:
-      onetime: 5.1.2
-      signal-exit: 3.0.7
-    dev: true
-
-  /restore-cursor@4.0.0:
-    resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+  restore-cursor@3.1.0:
     dependencies:
       onetime: 5.1.2
       signal-exit: 3.0.7
 
-  /retext-latin@3.1.0:
-    resolution: {integrity: sha512-5MrD1tuebzO8ppsja5eEu+ZbBeUNCjoEarn70tkXOS7Bdsdf6tNahsv2bY0Z8VooFF6cw7/6S+d3yI/TMlMVVQ==}
+  restore-cursor@5.1.0:
     dependencies:
-      '@types/nlcst': 1.0.0
+      onetime: 7.0.0
+      signal-exit: 4.1.0
+
+  retext-latin@3.1.0:
+    dependencies:
+      '@types/nlcst': 1.0.4
       parse-latin: 5.0.1
       unherit: 3.0.1
       unified: 10.1.2
 
-  /retext-smartypants@5.2.0:
-    resolution: {integrity: sha512-Do8oM+SsjrbzT2UNIKgheP0hgUQTDDQYyZaIY3kfq0pdFzoPk+ZClYJ+OERNXveog4xf1pZL4PfRxNoVL7a/jw==}
+  retext-latin@4.0.0:
     dependencies:
-      '@types/nlcst': 1.0.0
+      '@types/nlcst': 2.0.3
+      parse-latin: 7.0.0
+      unified: 11.0.5
+
+  retext-smartypants@5.2.0:
+    dependencies:
+      '@types/nlcst': 1.0.4
       nlcst-to-string: 3.1.1
       unified: 10.1.2
       unist-util-visit: 4.1.2
 
-  /retext-stringify@3.1.0:
-    resolution: {integrity: sha512-767TLOaoXFXyOnjx/EggXlb37ZD2u4P1n0GJqVdpipqACsQP+20W+BNpMYrlJkq7hxffnFk+jc6mAK9qrbuB8w==}
+  retext-smartypants@6.2.0:
     dependencies:
-      '@types/nlcst': 1.0.0
+      '@types/nlcst': 2.0.3
+      nlcst-to-string: 4.0.0
+      unist-util-visit: 5.0.0
+
+  retext-stringify@3.1.0:
+    dependencies:
+      '@types/nlcst': 1.0.4
       nlcst-to-string: 3.1.1
       unified: 10.1.2
 
-  /retext@8.1.0:
-    resolution: {integrity: sha512-N9/Kq7YTn6ZpzfiGW45WfEGJqFf1IM1q8OsRa1CGzIebCJBNCANDRmOrholiDRGKo/We7ofKR4SEvcGAWEMD3Q==}
+  retext-stringify@4.0.0:
     dependencies:
-      '@types/nlcst': 1.0.0
+      '@types/nlcst': 2.0.3
+      nlcst-to-string: 4.0.0
+      unified: 11.0.5
+
+  retext@8.1.0:
+    dependencies:
+      '@types/nlcst': 1.0.4
       retext-latin: 3.1.0
       retext-stringify: 3.1.0
       unified: 10.1.2
 
-  /retry@0.12.0:
-    resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==}
-    engines: {node: '>= 4'}
-    dev: true
+  retext@9.0.0:
+    dependencies:
+      '@types/nlcst': 2.0.3
+      retext-latin: 4.0.0
+      retext-stringify: 4.0.0
+      unified: 11.0.5
 
-  /reusify@1.0.4:
-    resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
-    engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+  retry@0.12.0: {}
 
-  /right-now@1.0.0:
-    resolution: {integrity: sha512-DA8+YS+sMIVpbsuKgy+Z67L9Lxb1p05mNxRpDPNksPDEFir4vmBlUtuN9jkTGn9YMMdlBuK7XQgFiz6ws+yhSg==}
-    dev: false
+  reusify@1.0.4: {}
 
-  /rimraf@3.0.2:
-    resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
-    hasBin: true
+  right-now@1.0.0: {}
+
+  rimraf@3.0.2:
     dependencies:
       glob: 7.2.3
 
-  /rimraf@4.4.1:
-    resolution: {integrity: sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==}
-    engines: {node: '>=14'}
-    hasBin: true
+  rimraf@4.4.1:
     dependencies:
       glob: 9.3.5
-    dev: true
 
-  /rollup-plugin-terser@7.0.2(rollup@2.79.1):
-    resolution: {integrity: sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==}
-    deprecated: This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser
-    peerDependencies:
-      rollup: ^2.0.0
+  rollup-plugin-terser@7.0.2(rollup@2.79.2):
     dependencies:
-      '@babel/code-frame': 7.23.5
+      '@babel/code-frame': 7.25.7
       jest-worker: 26.6.2
-      rollup: 2.79.1
+      rollup: 2.79.2
       serialize-javascript: 4.0.0
-      terser: 5.26.0
-    dev: true
+      terser: 5.36.0
 
-  /rollup-plugin-visualizer@5.12.0:
-    resolution: {integrity: sha512-8/NU9jXcHRs7Nnj07PF2o4gjxmm9lXIrZ8r175bT9dK8qoLlvKTwRMArRCMgpMGlq8CTLugRvEmyMeMXIU2pNQ==}
-    engines: {node: '>=14'}
-    hasBin: true
-    peerDependencies:
-      rollup: 2.x || 3.x || 4.x
-    peerDependenciesMeta:
-      rollup:
-        optional: true
+  rollup-plugin-visualizer@5.12.0(rollup@4.24.0):
     dependencies:
       open: 8.4.0
       picomatch: 2.3.1
       source-map: 0.7.4
       yargs: 17.7.2
-    dev: true
+    optionalDependencies:
+      rollup: 4.24.0
 
-  /rollup@2.79.1:
-    resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==}
-    engines: {node: '>=10.0.0'}
-    hasBin: true
+  rollup@2.79.2:
     optionalDependencies:
       fsevents: 2.3.3
-    dev: true
 
-  /rollup@4.13.0:
-    resolution: {integrity: sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==}
-    engines: {node: '>=18.0.0', npm: '>=8.0.0'}
-    hasBin: true
+  rollup@4.24.0:
     dependencies:
-      '@types/estree': 1.0.5
+      '@types/estree': 1.0.6
     optionalDependencies:
-      '@rollup/rollup-android-arm-eabi': 4.13.0
-      '@rollup/rollup-android-arm64': 4.13.0
-      '@rollup/rollup-darwin-arm64': 4.13.0
-      '@rollup/rollup-darwin-x64': 4.13.0
-      '@rollup/rollup-linux-arm-gnueabihf': 4.13.0
-      '@rollup/rollup-linux-arm64-gnu': 4.13.0
-      '@rollup/rollup-linux-arm64-musl': 4.13.0
-      '@rollup/rollup-linux-riscv64-gnu': 4.13.0
-      '@rollup/rollup-linux-x64-gnu': 4.13.0
-      '@rollup/rollup-linux-x64-musl': 4.13.0
-      '@rollup/rollup-win32-arm64-msvc': 4.13.0
-      '@rollup/rollup-win32-ia32-msvc': 4.13.0
-      '@rollup/rollup-win32-x64-msvc': 4.13.0
+      '@rollup/rollup-android-arm-eabi': 4.24.0
+      '@rollup/rollup-android-arm64': 4.24.0
+      '@rollup/rollup-darwin-arm64': 4.24.0
+      '@rollup/rollup-darwin-x64': 4.24.0
+      '@rollup/rollup-linux-arm-gnueabihf': 4.24.0
+      '@rollup/rollup-linux-arm-musleabihf': 4.24.0
+      '@rollup/rollup-linux-arm64-gnu': 4.24.0
+      '@rollup/rollup-linux-arm64-musl': 4.24.0
+      '@rollup/rollup-linux-powerpc64le-gnu': 4.24.0
+      '@rollup/rollup-linux-riscv64-gnu': 4.24.0
+      '@rollup/rollup-linux-s390x-gnu': 4.24.0
+      '@rollup/rollup-linux-x64-gnu': 4.24.0
+      '@rollup/rollup-linux-x64-musl': 4.24.0
+      '@rollup/rollup-win32-arm64-msvc': 4.24.0
+      '@rollup/rollup-win32-ia32-msvc': 4.24.0
+      '@rollup/rollup-win32-x64-msvc': 4.24.0
       fsevents: 2.3.3
 
-  /rollup@4.9.2:
-    resolution: {integrity: sha512-66RB8OtFKUTozmVEh3qyNfH+b+z2RXBVloqO2KCC/pjFaGaHtxP9fVfOQKPSGXg2mElmjmxjW/fZ7iKrEpMH5Q==}
-    engines: {node: '>=18.0.0', npm: '>=8.0.0'}
-    hasBin: true
-    optionalDependencies:
-      '@rollup/rollup-android-arm-eabi': 4.9.2
-      '@rollup/rollup-android-arm64': 4.9.2
-      '@rollup/rollup-darwin-arm64': 4.9.2
-      '@rollup/rollup-darwin-x64': 4.9.2
-      '@rollup/rollup-linux-arm-gnueabihf': 4.9.2
-      '@rollup/rollup-linux-arm64-gnu': 4.9.2
-      '@rollup/rollup-linux-arm64-musl': 4.9.2
-      '@rollup/rollup-linux-riscv64-gnu': 4.9.2
-      '@rollup/rollup-linux-x64-gnu': 4.9.2
-      '@rollup/rollup-linux-x64-musl': 4.9.2
-      '@rollup/rollup-win32-arm64-msvc': 4.9.2
-      '@rollup/rollup-win32-ia32-msvc': 4.9.2
-      '@rollup/rollup-win32-x64-msvc': 4.9.2
-      fsevents: 2.3.3
-    dev: true
+  run-async@2.4.1: {}
 
-  /run-async@2.4.1:
-    resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
-    engines: {node: '>=0.12.0'}
-    dev: true
-
-  /run-parallel@1.2.0:
-    resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+  run-parallel@1.2.0:
     dependencies:
       queue-microtask: 1.2.3
 
-  /rxjs@7.8.0:
-    resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==}
+  rxjs@7.8.0:
     dependencies:
-      tslib: 2.5.0
-    dev: true
+      tslib: 2.8.0
 
-  /safe-array-concat@1.0.1:
-    resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==}
-    engines: {node: '>=0.4'}
+  safe-array-concat@1.0.1:
     dependencies:
       call-bind: 1.0.5
       get-intrinsic: 1.2.2
       has-symbols: 1.0.3
       isarray: 2.0.5
-    dev: true
 
-  /safe-buffer@5.1.2:
-    resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
+  safe-array-concat@1.1.2:
+    dependencies:
+      call-bind: 1.0.7
+      get-intrinsic: 1.2.4
+      has-symbols: 1.0.3
+      isarray: 2.0.5
 
-  /safe-buffer@5.2.1:
-    resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+  safe-buffer@5.1.2: {}
 
-  /safe-regex-test@1.0.0:
-    resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==}
+  safe-buffer@5.2.1: {}
+
+  safe-regex-test@1.0.0:
     dependencies:
       call-bind: 1.0.5
       get-intrinsic: 1.2.2
       is-regex: 1.1.4
-    dev: true
 
-  /safer-buffer@2.1.2:
-    resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+  safe-regex-test@1.0.3:
+    dependencies:
+      call-bind: 1.0.7
+      es-errors: 1.3.0
+      is-regex: 1.1.4
 
-  /sass-lookup@5.0.1:
-    resolution: {integrity: sha512-t0X5PaizPc2H4+rCwszAqHZRtr4bugo4pgiCvrBFvIX0XFxnr29g77LJcpyj9A0DcKf7gXMLcgvRjsonYI6x4g==}
-    engines: {node: '>=14'}
-    hasBin: true
+  safer-buffer@2.1.2: {}
+
+  sass-lookup@5.0.1:
     dependencies:
       commander: 10.0.1
-    dev: true
 
-  /sax@1.3.0:
-    resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==}
-
-  /scheduler@0.23.0:
-    resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==}
+  scheduler@0.23.2:
     dependencies:
       loose-envify: 1.4.0
-    dev: false
 
-  /search-insights@2.13.0:
-    resolution: {integrity: sha512-Orrsjf9trHHxFRuo9/rzm0KIWmgzE8RMlZMzuhZOJ01Rnz3D0YBAe+V6473t6/H6c7irs6Lt48brULAiRWb3Vw==}
-    dev: false
+  search-insights@2.13.0: {}
 
-  /section-matter@1.0.0:
-    resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==}
-    engines: {node: '>=4'}
+  section-matter@1.0.0:
     dependencies:
       extend-shallow: 2.0.1
       kind-of: 6.0.3
 
-  /semver@5.7.1:
-    resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==}
-    hasBin: true
-    dev: true
+  semver@5.7.2: {}
 
-  /semver@6.3.1:
-    resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
-    hasBin: true
+  semver@6.3.1: {}
 
-  /semver@7.3.8:
-    resolution: {integrity: sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==}
-    engines: {node: '>=10'}
-    hasBin: true
+  semver@7.5.3:
     dependencies:
       lru-cache: 6.0.0
 
-  /semver@7.5.3:
-    resolution: {integrity: sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==}
-    engines: {node: '>=10'}
-    hasBin: true
-    dependencies:
-      lru-cache: 6.0.0
-    dev: true
-
-  /semver@7.5.4:
-    resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
-    engines: {node: '>=10'}
-    hasBin: true
+  semver@7.5.4:
     dependencies:
       lru-cache: 6.0.0
 
-  /serialize-javascript@4.0.0:
-    resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==}
+  semver@7.6.3: {}
+
+  serialize-javascript@4.0.0:
     dependencies:
       randombytes: 2.1.0
-    dev: true
 
-  /server-destroy@1.0.1:
-    resolution: {integrity: sha512-rb+9B5YBIEzYcD6x2VKidaa+cqYBJQKnU4oe4E3ANwRRN56yk/ua1YCJT1n21NTS8w6CcOclAKNP3PhdCXKYtQ==}
+  set-blocking@2.0.0: {}
 
-  /set-blocking@2.0.0:
-    resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==}
-
-  /set-function-length@1.1.1:
-    resolution: {integrity: sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==}
-    engines: {node: '>= 0.4'}
+  set-function-length@1.1.1:
     dependencies:
       define-data-property: 1.1.1
       get-intrinsic: 1.2.2
       gopd: 1.0.1
       has-property-descriptors: 1.0.0
-    dev: true
 
-  /set-function-name@2.0.1:
-    resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==}
-    engines: {node: '>= 0.4'}
+  set-function-length@1.2.2:
+    dependencies:
+      define-data-property: 1.1.4
+      es-errors: 1.3.0
+      function-bind: 1.1.2
+      get-intrinsic: 1.2.4
+      gopd: 1.0.1
+      has-property-descriptors: 1.0.2
+
+  set-function-name@2.0.1:
     dependencies:
       define-data-property: 1.1.1
       functions-have-names: 1.2.3
       has-property-descriptors: 1.0.0
-    dev: true
 
-  /sfumato@0.1.2:
-    resolution: {integrity: sha512-j2s5BLUS5VUNtaK1l+v+yal3XjjV7JXCQIwE5Xs4yiQ3HJ+2Fc/dd3IkkrVHn0AJO2epShSWVoP3GnE0TvPdMg==}
+  set-function-name@2.0.2:
+    dependencies:
+      define-data-property: 1.1.4
+      es-errors: 1.3.0
+      functions-have-names: 1.2.3
+      has-property-descriptors: 1.0.2
+
+  sfumato@0.1.2:
     dependencies:
       soundfont2: 0.4.0
-    dev: false
 
-  /shallow-clone@3.0.1:
-    resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==}
-    engines: {node: '>=8'}
+  shallow-clone@3.0.1:
     dependencies:
       kind-of: 6.0.3
-    dev: true
 
-  /sharp@0.33.1:
-    resolution: {integrity: sha512-iAYUnOdTqqZDb3QjMneBKINTllCJDZ3em6WaWy7NPECM4aHncvqHRm0v0bN9nqJxMiwamv5KIdauJ6lUzKDpTQ==}
-    engines: {libvips: '>=8.15.0', node: ^18.17.0 || ^20.3.0 || >=21.0.0}
-    requiresBuild: true
+  sharp@0.33.5:
     dependencies:
       color: 4.2.3
-      detect-libc: 2.0.2
-      semver: 7.5.4
+      detect-libc: 2.0.3
+      semver: 7.6.3
     optionalDependencies:
-      '@img/sharp-darwin-arm64': 0.33.1
-      '@img/sharp-darwin-x64': 0.33.1
-      '@img/sharp-libvips-darwin-arm64': 1.0.0
-      '@img/sharp-libvips-darwin-x64': 1.0.0
-      '@img/sharp-libvips-linux-arm': 1.0.0
-      '@img/sharp-libvips-linux-arm64': 1.0.0
-      '@img/sharp-libvips-linux-s390x': 1.0.0
-      '@img/sharp-libvips-linux-x64': 1.0.0
-      '@img/sharp-libvips-linuxmusl-arm64': 1.0.0
-      '@img/sharp-libvips-linuxmusl-x64': 1.0.0
-      '@img/sharp-linux-arm': 0.33.1
-      '@img/sharp-linux-arm64': 0.33.1
-      '@img/sharp-linux-s390x': 0.33.1
-      '@img/sharp-linux-x64': 0.33.1
-      '@img/sharp-linuxmusl-arm64': 0.33.1
-      '@img/sharp-linuxmusl-x64': 0.33.1
-      '@img/sharp-wasm32': 0.33.1
-      '@img/sharp-win32-ia32': 0.33.1
-      '@img/sharp-win32-x64': 0.33.1
+      '@img/sharp-darwin-arm64': 0.33.5
+      '@img/sharp-darwin-x64': 0.33.5
+      '@img/sharp-libvips-darwin-arm64': 1.0.4
+      '@img/sharp-libvips-darwin-x64': 1.0.4
+      '@img/sharp-libvips-linux-arm': 1.0.5
+      '@img/sharp-libvips-linux-arm64': 1.0.4
+      '@img/sharp-libvips-linux-s390x': 1.0.4
+      '@img/sharp-libvips-linux-x64': 1.0.4
+      '@img/sharp-libvips-linuxmusl-arm64': 1.0.4
+      '@img/sharp-libvips-linuxmusl-x64': 1.0.4
+      '@img/sharp-linux-arm': 0.33.5
+      '@img/sharp-linux-arm64': 0.33.5
+      '@img/sharp-linux-s390x': 0.33.5
+      '@img/sharp-linux-x64': 0.33.5
+      '@img/sharp-linuxmusl-arm64': 0.33.5
+      '@img/sharp-linuxmusl-x64': 0.33.5
+      '@img/sharp-wasm32': 0.33.5
+      '@img/sharp-win32-ia32': 0.33.5
+      '@img/sharp-win32-x64': 0.33.5
 
-  /shebang-command@2.0.0:
-    resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
-    engines: {node: '>=8'}
+  shebang-command@2.0.0:
     dependencies:
       shebang-regex: 3.0.0
 
-  /shebang-regex@3.0.0:
-    resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
-    engines: {node: '>=8'}
+  shebang-regex@3.0.0: {}
 
-  /shiki@1.2.0:
-    resolution: {integrity: sha512-xLhiTMOIUXCv5DqJ4I70GgQCtdlzsTqFLZWcMHHG3TAieBUbvEGthdrlPDlX4mL/Wszx9C6rEcxU6kMlg4YlxA==}
+  shiki@1.22.0:
     dependencies:
-      '@shikijs/core': 1.2.0
-    dev: false
+      '@shikijs/core': 1.22.0
+      '@shikijs/engine-javascript': 1.22.0
+      '@shikijs/engine-oniguruma': 1.22.0
+      '@shikijs/types': 1.22.0
+      '@shikijs/vscode-textmate': 9.3.0
+      '@types/hast': 3.0.4
 
-  /shikiji@0.6.13:
-    resolution: {integrity: sha512-4T7X39csvhT0p7GDnq9vysWddf2b6BeioiN3Ymhnt3xcy9tXmDcnsEFVxX18Z4YcQgEE/w48dLJ4pPPUcG9KkA==}
-    dependencies:
-      hast-util-to-html: 9.0.0
-
-  /side-channel@1.0.4:
-    resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
+  side-channel@1.0.4:
     dependencies:
       call-bind: 1.0.5
       get-intrinsic: 1.2.2
       object-inspect: 1.13.1
-    dev: true
 
-  /siginfo@2.0.0:
-    resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
-    dev: true
-
-  /signal-exit@3.0.7:
-    resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
-
-  /signal-exit@4.1.0:
-    resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
-    engines: {node: '>=14'}
-
-  /sigstore@1.4.0:
-    resolution: {integrity: sha512-N7TRpSbFjY/TrFDg6yGAQSYBrQ5s6qmPiq4pD6fkv1LoyfMsLG0NwZWG2s5q+uttLHgyVyTa0Rogx2P78rN8kQ==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
-    hasBin: true
+  side-channel@1.0.6:
     dependencies:
-      '@sigstore/protobuf-specs': 0.1.0
-      make-fetch-happen: 11.1.1
-      tuf-js: 1.1.4
-    transitivePeerDependencies:
-      - bluebird
-      - supports-color
-    dev: true
+      call-bind: 1.0.7
+      es-errors: 1.3.0
+      get-intrinsic: 1.2.4
+      object-inspect: 1.13.2
 
-  /sigstore@2.1.0:
-    resolution: {integrity: sha512-kPIj+ZLkyI3QaM0qX8V/nSsweYND3W448pwkDgS6CQ74MfhEkIR8ToK5Iyx46KJYRjseVcD3Rp9zAmUAj6ZjPw==}
-    engines: {node: ^16.14.0 || >=18.0.0}
+  siginfo@2.0.0: {}
+
+  signal-exit@3.0.7: {}
+
+  signal-exit@4.1.0: {}
+
+  sigstore@2.3.1:
     dependencies:
-      '@sigstore/bundle': 2.1.0
-      '@sigstore/protobuf-specs': 0.2.1
-      '@sigstore/sign': 2.2.0
-      '@sigstore/tuf': 2.2.0
+      '@sigstore/bundle': 2.3.2
+      '@sigstore/core': 1.1.0
+      '@sigstore/protobuf-specs': 0.3.2
+      '@sigstore/sign': 2.3.2
+      '@sigstore/tuf': 2.3.4
+      '@sigstore/verify': 1.2.1
     transitivePeerDependencies:
       - supports-color
-    dev: true
 
-  /simple-concat@1.0.1:
-    resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==}
-    dev: true
+  simple-concat@1.0.1: {}
 
-  /simple-get@4.0.1:
-    resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==}
+  simple-get@4.0.1:
     dependencies:
       decompress-response: 6.0.0
       once: 1.4.0
       simple-concat: 1.0.1
-    dev: true
 
-  /simple-swizzle@0.2.2:
-    resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==}
-    requiresBuild: true
+  simple-swizzle@0.2.2:
     dependencies:
       is-arrayish: 0.3.2
 
-  /sirv@2.0.4:
-    resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==}
-    engines: {node: '>= 10'}
+  sirv@2.0.4:
     dependencies:
-      '@polka/url': 1.0.0-next.24
+      '@polka/url': 1.0.0-next.28
       mrmime: 2.0.0
-      totalist: 3.0.0
-    dev: true
+      totalist: 3.0.1
 
-  /sisteransi@1.0.5:
-    resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
+  sisteransi@1.0.5: {}
 
-  /slash@3.0.0:
-    resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
-    engines: {node: '>=8'}
-    dev: true
+  slash@3.0.0: {}
 
-  /smart-buffer@4.2.0:
-    resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==}
-    engines: {node: '>= 6.0.0', npm: '>= 3.0.0'}
-    dev: true
+  smart-buffer@4.2.0: {}
 
-  /socks-proxy-agent@7.0.0:
-    resolution: {integrity: sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==}
-    engines: {node: '>= 10'}
+  socks-proxy-agent@8.0.4:
     dependencies:
-      agent-base: 6.0.2
-      debug: 4.3.4
-      socks: 2.7.1
+      agent-base: 7.1.1
+      debug: 4.3.7
+      socks: 2.8.3
     transitivePeerDependencies:
       - supports-color
-    dev: true
 
-  /socks-proxy-agent@8.0.2:
-    resolution: {integrity: sha512-8zuqoLv1aP/66PHF5TqwJ7Czm3Yv32urJQHrVyhD7mmA6d61Zv8cIXQYPTWwmg6qlupnPvs/QKDmfa4P/qct2g==}
-    engines: {node: '>= 14'}
+  socks@2.8.3:
     dependencies:
-      agent-base: 7.1.0
-      debug: 4.3.4
-      socks: 2.7.1
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
-  /socks@2.7.1:
-    resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==}
-    engines: {node: '>= 10.13.0', npm: '>= 3.0.0'}
-    dependencies:
-      ip: 2.0.0
+      ip-address: 9.0.5
       smart-buffer: 4.2.0
-    dev: true
 
-  /sort-array@4.1.5:
-    resolution: {integrity: sha512-Ya4peoS1fgFN42RN1REk2FgdNOeLIEMKFGJvs7VTP3OklF8+kl2SkpVliZ4tk/PurWsrWRsdNdU+tgyOBkB9sA==}
-    engines: {node: '>=10'}
+  sort-array@5.0.0:
     dependencies:
-      array-back: 5.0.0
-      typical: 6.0.1
-    dev: true
+      array-back: 6.2.2
+      typical: 7.2.0
 
-  /sort-keys@2.0.0:
-    resolution: {integrity: sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==}
-    engines: {node: '>=4'}
+  sort-keys@2.0.0:
     dependencies:
       is-plain-obj: 1.1.0
-    dev: true
 
-  /soundfont2@0.4.0:
-    resolution: {integrity: sha512-537WiurDBRbDLVhJMxXLE06D6yWxJCidfPClnibZ0f8dKMDpv+0fIfwCQ8pELE0JqKX05SOJosNJgKzQobaAEA==}
-    dev: false
+  soundfont2@0.4.0: {}
 
-  /source-map-generator@0.8.0:
-    resolution: {integrity: sha512-psgxdGMwl5MZM9S3FWee4EgsEaIjahYV5AzGnwUvPhWeITz/j6rKpysQHlQ4USdxvINlb8lKfWGIXwfkrgtqkA==}
-    engines: {node: '>= 10'}
-    dev: true
+  source-map-generator@0.8.0: {}
 
-  /source-map-js@1.0.2:
-    resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
-    engines: {node: '>=0.10.0'}
+  source-map-js@1.0.2: {}
 
-  /source-map-js@1.2.0:
-    resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==}
-    engines: {node: '>=0.10.0'}
+  source-map-js@1.2.1: {}
 
-  /source-map-support@0.5.21:
-    resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+  source-map-support@0.5.21:
     dependencies:
       buffer-from: 1.1.2
       source-map: 0.6.1
-    dev: true
 
-  /source-map@0.5.7:
-    resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==}
-    engines: {node: '>=0.10.0'}
-    dev: false
+  source-map@0.5.7: {}
 
-  /source-map@0.6.1:
-    resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
-    engines: {node: '>=0.10.0'}
+  source-map@0.6.1: {}
 
-  /source-map@0.7.4:
-    resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
-    engines: {node: '>= 8'}
+  source-map@0.7.4: {}
 
-  /source-map@0.8.0-beta.0:
-    resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
-    engines: {node: '>= 8'}
+  source-map@0.8.0-beta.0:
     dependencies:
       whatwg-url: 7.1.0
-    dev: true
 
-  /sourcemap-codec@1.4.8:
-    resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
-    deprecated: Please use @jridgewell/sourcemap-codec instead
-    dev: true
+  sourcemap-codec@1.4.8: {}
 
-  /space-separated-tokens@2.0.2:
-    resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
+  space-separated-tokens@2.0.2: {}
 
-  /spdx-correct@3.1.1:
-    resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==}
+  spdx-correct@3.1.1:
     dependencies:
       spdx-expression-parse: 3.0.1
       spdx-license-ids: 3.0.12
-    dev: true
 
-  /spdx-exceptions@2.3.0:
-    resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==}
-    dev: true
+  spdx-exceptions@2.3.0: {}
 
-  /spdx-expression-parse@3.0.1:
-    resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
+  spdx-expression-parse@3.0.1:
     dependencies:
       spdx-exceptions: 2.3.0
       spdx-license-ids: 3.0.12
-    dev: true
 
-  /spdx-license-ids@3.0.12:
-    resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==}
-    dev: true
+  spdx-license-ids@3.0.12: {}
 
-  /split2@3.2.2:
-    resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==}
+  split2@3.2.2:
     dependencies:
       readable-stream: 3.6.0
-    dev: true
 
-  /split@1.0.1:
-    resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==}
+  split@1.0.1:
     dependencies:
       through: 2.3.8
-    dev: true
 
-  /sprintf-js@1.0.3:
-    resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
+  sprintf-js@1.0.3: {}
 
-  /ssri@10.0.4:
-    resolution: {integrity: sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+  sprintf-js@1.1.3: {}
+
+  ssri@10.0.6:
     dependencies:
-      minipass: 5.0.0
-    dev: true
+      minipass: 7.1.2
 
-  /ssri@9.0.1:
-    resolution: {integrity: sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==}
-    engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+  stackback@0.0.2: {}
+
+  standardized-audio-context@25.3.37:
     dependencies:
-      minipass: 3.3.6
-    dev: true
-
-  /stackback@0.0.2:
-    resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
-    dev: true
-
-  /standardized-audio-context@25.3.37:
-    resolution: {integrity: sha512-lr0+RH/IJXYMts95oYKIJ+orTmstOZN3GXWVGmlkbMj8OLahREkRh7DhNGLYgBGDkBkhhc4ev5pYGSFN3gltHw==}
-    dependencies:
-      '@babel/runtime': 7.20.13
+      '@babel/runtime': 7.25.7
       automation-events: 5.0.0
-      tslib: 2.5.0
-    dev: false
+      tslib: 2.8.0
 
-  /std-env@3.7.0:
-    resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==}
-    dev: true
+  std-env@3.7.0: {}
 
-  /stdin-discarder@0.1.0:
-    resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==}
-    engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-    dependencies:
-      bl: 5.1.0
+  stdin-discarder@0.2.2: {}
 
-  /stdopt@2.2.0:
-    resolution: {integrity: sha512-D/p41NgXOkcj1SeGhfXOwv9z1K6EV3sjAUY5aeepVbgEHv7DpKWLTjhjScyzMWAQCAgUQys1mjH0eArm4cjRGw==}
+  stdopt@2.2.0:
     dependencies:
       is-arrayish: 0.3.2
-    dev: false
 
-  /stream-connect@1.0.2:
-    resolution: {integrity: sha512-68Kl+79cE0RGKemKkhxTSg8+6AGrqBt+cbZAXevg2iJ6Y3zX4JhA/sZeGzLpxW9cXhmqAcE7KnJCisUmIUfnFQ==}
-    engines: {node: '>=0.10.0'}
+  stream-connect@1.0.2:
     dependencies:
       array-back: 1.0.4
-    dev: true
 
-  /stream-meter@1.0.4:
-    resolution: {integrity: sha512-4sOEtrbgFotXwnEuzzsQBYEV1elAeFSO8rSGeTwabuX1RRn/kEq9JVH7I0MRBhKVRR0sJkr0M0QCH7yOLf9fhQ==}
+  stream-meter@1.0.4:
     dependencies:
       readable-stream: 2.3.7
-    dev: true
 
-  /stream-parser@0.3.1:
-    resolution: {integrity: sha512-bJ/HgKq41nlKvlhccD5kaCr/P+Hu0wPNKPJOH7en+YrJu/9EgqUF+88w5Jb6KNcjOFMhfX4B2asfeAtIGuHObQ==}
+  stream-parser@0.3.1:
     dependencies:
       debug: 2.6.9
     transitivePeerDependencies:
       - supports-color
 
-  /stream-transform@3.3.0:
-    resolution: {integrity: sha512-pG1NeDdmErNYKtvTpFayrEueAmL0xVU5wd22V7InGnatl4Ocq3HY7dcXIKj629kXvYQvglCC7CeDIGAlx1RNGA==}
-    dev: false
+  stream-transform@3.3.2: {}
 
-  /stream-via@1.0.4:
-    resolution: {integrity: sha512-DBp0lSvX5G9KGRDTkR/R+a29H+Wk2xItOF+MpZLLNDWbEV9tGPnqLPxHEYjmiz8xGtJHRIqmI+hCjmNzqoA4nQ==}
-    engines: {node: '>=0.10.0'}
-    dev: true
+  stream-via@1.0.4: {}
 
-  /string-width@2.1.1:
-    resolution: {integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==}
-    engines: {node: '>=4'}
+  string-width@2.1.1:
     dependencies:
       is-fullwidth-code-point: 2.0.0
       strip-ansi: 4.0.0
-    dev: false
 
-  /string-width@4.2.3:
-    resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
-    engines: {node: '>=8'}
+  string-width@4.2.3:
     dependencies:
       emoji-regex: 8.0.0
       is-fullwidth-code-point: 3.0.0
       strip-ansi: 6.0.1
 
-  /string-width@5.1.2:
-    resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
-    engines: {node: '>=12'}
+  string-width@5.1.2:
     dependencies:
       eastasianwidth: 0.2.0
       emoji-regex: 9.2.2
       strip-ansi: 7.1.0
 
-  /string-width@6.1.0:
-    resolution: {integrity: sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==}
-    engines: {node: '>=16'}
+  string-width@7.2.0:
     dependencies:
-      eastasianwidth: 0.2.0
-      emoji-regex: 10.3.0
+      emoji-regex: 10.4.0
+      get-east-asian-width: 1.3.0
       strip-ansi: 7.1.0
 
-  /string-width@7.0.0:
-    resolution: {integrity: sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==}
-    engines: {node: '>=18'}
+  string.prototype.matchall@4.0.11:
     dependencies:
-      emoji-regex: 10.3.0
-      get-east-asian-width: 1.2.0
-      strip-ansi: 7.1.0
-
-  /string.prototype.matchall@4.0.10:
-    resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==}
-    dependencies:
-      call-bind: 1.0.5
+      call-bind: 1.0.7
       define-properties: 1.2.1
-      es-abstract: 1.22.3
-      get-intrinsic: 1.2.2
+      es-abstract: 1.23.3
+      es-errors: 1.3.0
+      es-object-atoms: 1.0.0
+      get-intrinsic: 1.2.4
+      gopd: 1.0.1
       has-symbols: 1.0.3
-      internal-slot: 1.0.6
-      regexp.prototype.flags: 1.5.1
-      set-function-name: 2.0.1
-      side-channel: 1.0.4
-    dev: true
+      internal-slot: 1.0.7
+      regexp.prototype.flags: 1.5.3
+      set-function-name: 2.0.2
+      side-channel: 1.0.6
 
-  /string.prototype.trim@1.2.8:
-    resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==}
-    engines: {node: '>= 0.4'}
+  string.prototype.trim@1.2.8:
     dependencies:
       call-bind: 1.0.5
       define-properties: 1.2.1
       es-abstract: 1.22.3
-    dev: true
 
-  /string.prototype.trimend@1.0.7:
-    resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==}
+  string.prototype.trim@1.2.9:
+    dependencies:
+      call-bind: 1.0.7
+      define-properties: 1.2.1
+      es-abstract: 1.23.3
+      es-object-atoms: 1.0.0
+
+  string.prototype.trimend@1.0.8:
+    dependencies:
+      call-bind: 1.0.7
+      define-properties: 1.2.1
+      es-object-atoms: 1.0.0
+
+  string.prototype.trimstart@1.0.7:
     dependencies:
       call-bind: 1.0.5
       define-properties: 1.2.1
       es-abstract: 1.22.3
-    dev: true
 
-  /string.prototype.trimstart@1.0.7:
-    resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==}
+  string.prototype.trimstart@1.0.8:
     dependencies:
-      call-bind: 1.0.5
+      call-bind: 1.0.7
       define-properties: 1.2.1
-      es-abstract: 1.22.3
-    dev: true
+      es-object-atoms: 1.0.0
 
-  /string_decoder@0.10.31:
-    resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==}
-    dev: false
+  string_decoder@0.10.31: {}
 
-  /string_decoder@1.1.1:
-    resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
+  string_decoder@1.1.1:
     dependencies:
       safe-buffer: 5.1.2
 
-  /string_decoder@1.3.0:
-    resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+  string_decoder@1.3.0:
     dependencies:
       safe-buffer: 5.2.1
 
-  /stringify-entities@4.0.3:
-    resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==}
+  stringify-entities@4.0.4:
     dependencies:
       character-entities-html4: 2.1.0
       character-entities-legacy: 3.0.0
 
-  /stringify-object@3.3.0:
-    resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==}
-    engines: {node: '>=4'}
+  stringify-object@3.3.0:
     dependencies:
       get-own-enumerable-property-symbols: 3.0.2
       is-obj: 1.0.1
       is-regexp: 1.0.0
-    dev: true
 
-  /strip-ansi@4.0.0:
-    resolution: {integrity: sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==}
-    engines: {node: '>=4'}
+  strip-ansi@4.0.0:
     dependencies:
       ansi-regex: 3.0.1
-    dev: false
 
-  /strip-ansi@6.0.1:
-    resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
-    engines: {node: '>=8'}
+  strip-ansi@6.0.1:
     dependencies:
       ansi-regex: 5.0.1
 
-  /strip-ansi@7.1.0:
-    resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
-    engines: {node: '>=12'}
+  strip-ansi@7.1.0:
     dependencies:
-      ansi-regex: 6.0.1
+      ansi-regex: 6.1.0
 
-  /strip-bom-string@1.0.0:
-    resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==}
-    engines: {node: '>=0.10.0'}
+  strip-bom-string@1.0.0: {}
 
-  /strip-bom@3.0.0:
-    resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
-    engines: {node: '>=4'}
+  strip-bom@3.0.0: {}
 
-  /strip-bom@4.0.0:
-    resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==}
-    engines: {node: '>=8'}
-    dev: true
+  strip-bom@4.0.0: {}
 
-  /strip-comments@2.0.1:
-    resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==}
-    engines: {node: '>=10'}
-    dev: true
+  strip-comments@2.0.1: {}
 
-  /strip-final-newline@2.0.0:
-    resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
-    engines: {node: '>=6'}
+  strip-final-newline@2.0.0: {}
 
-  /strip-final-newline@3.0.0:
-    resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
-    engines: {node: '>=12'}
-
-  /strip-indent@3.0.0:
-    resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
-    engines: {node: '>=8'}
+  strip-indent@3.0.0:
     dependencies:
       min-indent: 1.0.1
-    dev: true
 
-  /strip-json-comments@2.0.1:
-    resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
-    engines: {node: '>=0.10.0'}
-    dev: true
+  strip-json-comments@2.0.1: {}
 
-  /strip-json-comments@3.1.1:
-    resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
-    engines: {node: '>=8'}
+  strip-json-comments@3.1.1: {}
 
-  /strip-literal@1.3.0:
-    resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==}
-    dependencies:
-      acorn: 8.11.3
-    dev: true
+  strnum@1.0.5: {}
 
-  /strnum@1.0.5:
-    resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==}
-    dev: false
-
-  /strong-log-transformer@2.1.0:
-    resolution: {integrity: sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==}
-    engines: {node: '>=4'}
-    hasBin: true
+  strong-log-transformer@2.1.0:
     dependencies:
       duplexer: 0.1.2
-      minimist: 1.2.7
+      minimist: 1.2.8
       through: 2.3.8
-    dev: true
 
-  /style-mod@4.0.0:
-    resolution: {integrity: sha512-OPhtyEjyyN9x3nhPsu76f52yUGXiZcgvsrFVtvTkyGRQJ0XK+GPc6ov1z+lRpbeabka+MYEQxOYRnt5nF30aMw==}
-    dev: false
+  style-mod@4.0.0: {}
 
-  /style-mod@4.1.0:
-    resolution: {integrity: sha512-Ca5ib8HrFn+f+0n4N4ScTIA9iTOQ7MaGS1ylHcoVqW9J7w2w8PzN6g9gKmTYgGEBH8e120+RCmhpje6jC5uGWA==}
-    dev: false
+  style-mod@4.1.0: {}
 
-  /style-to-object@0.4.1:
-    resolution: {integrity: sha512-HFpbb5gr2ypci7Qw+IOhnP2zOU7e77b+rzM+wTzXzfi1PrtBCX0E7Pk4wL4iTLnhzZ+JgEGAhX81ebTg/aYjQw==}
+  style-to-object@0.4.4:
     dependencies:
       inline-style-parser: 0.1.1
-    dev: false
 
-  /style-to-object@1.0.5:
-    resolution: {integrity: sha512-rDRwHtoDD3UMMrmZ6BzOW0naTjMsVZLIjsGleSKS/0Oz+cgCfAPRspaqJuE8rDzpKha/nEvnM0IF4seEAZUTKQ==}
+  style-to-object@1.0.8:
     dependencies:
-      inline-style-parser: 0.2.2
-    dev: false
+      inline-style-parser: 0.2.4
 
-  /stylus-lookup@5.0.1:
-    resolution: {integrity: sha512-tLtJEd5AGvnVy4f9UHQMw4bkJJtaAcmo54N+ovQBjDY3DuWyK9Eltxzr5+KG0q4ew6v2EHyuWWNnHeiw/Eo7rQ==}
-    engines: {node: '>=14'}
-    hasBin: true
+  stylus-lookup@5.0.1:
     dependencies:
       commander: 10.0.1
-    dev: true
 
-  /sucrase@3.32.0:
-    resolution: {integrity: sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==}
-    engines: {node: '>=8'}
-    hasBin: true
+  sucrase@3.32.0:
     dependencies:
       '@jridgewell/gen-mapping': 0.3.2
       commander: 4.1.1
@@ -13136,39 +15972,26 @@ packages:
       mz: 2.7.0
       pirates: 4.0.5
       ts-interface-checker: 0.1.13
-    dev: false
 
-  /supports-color@5.5.0:
-    resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
-    engines: {node: '>=4'}
+  supports-color@5.5.0:
     dependencies:
       has-flag: 3.0.0
 
-  /supports-color@7.2.0:
-    resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
-    engines: {node: '>=8'}
+  supports-color@7.2.0:
     dependencies:
       has-flag: 4.0.0
 
-  /supports-preserve-symlinks-flag@1.0.0:
-    resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
-    engines: {node: '>= 0.4'}
+  supports-preserve-symlinks-flag@1.0.0: {}
 
-  /table-layout@0.4.5:
-    resolution: {integrity: sha512-zTvf0mcggrGeTe/2jJ6ECkJHAQPIYEwDoqsiqBjI24mvRmQbInK5jq33fyypaCBxX08hMkfmdOqj6haT33EqWw==}
-    engines: {node: '>=4.0.0'}
+  table-layout@0.4.5:
     dependencies:
       array-back: 2.0.0
       deep-extend: 0.6.0
       lodash.padend: 4.6.1
       typical: 2.6.1
       wordwrapjs: 3.0.0
-    dev: true
 
-  /tailwindcss@3.4.0:
-    resolution: {integrity: sha512-VigzymniH77knD1dryXbyxR+ePHihHociZbXnLZHUyzf2MMs2ZVqlUrZ3FvpXP8pno9JzmILt1sZPD19M3IxtA==}
-    engines: {node: '>=14.0.0'}
-    hasBin: true
+  tailwindcss@3.4.14:
     dependencies:
       '@alloc/quick-lru': 5.2.0
       arg: 5.0.2
@@ -13194,732 +16017,493 @@ packages:
       sucrase: 3.32.0
     transitivePeerDependencies:
       - ts-node
-    dev: false
 
-  /tapable@2.2.1:
-    resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
-    engines: {node: '>=6'}
-    dev: true
+  tapable@2.2.1: {}
 
-  /tar-fs@2.1.1:
-    resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==}
+  tar-fs@2.1.1:
     dependencies:
       chownr: 1.1.4
       mkdirp-classic: 0.5.3
       pump: 3.0.0
       tar-stream: 2.2.0
-    dev: true
 
-  /tar-stream@2.2.0:
-    resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
-    engines: {node: '>=6'}
+  tar-stream@2.2.0:
     dependencies:
       bl: 4.1.0
       end-of-stream: 1.4.4
       fs-constants: 1.0.0
       inherits: 2.0.4
       readable-stream: 3.6.0
-    dev: true
 
-  /tar@6.1.11:
-    resolution: {integrity: sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==}
-    engines: {node: '>= 10'}
+  tar@6.2.1:
     dependencies:
       chownr: 2.0.0
       fs-minipass: 2.1.0
-      minipass: 3.3.6
+      minipass: 5.0.0
       minizlib: 2.1.2
       mkdirp: 1.0.4
       yallist: 4.0.0
-    dev: true
 
-  /tar@6.1.13:
-    resolution: {integrity: sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==}
-    engines: {node: '>=10'}
-    dependencies:
-      chownr: 2.0.0
-      fs-minipass: 2.1.0
-      minipass: 4.0.0
-      minizlib: 2.1.2
-      mkdirp: 1.0.4
-      yallist: 4.0.0
-    dev: true
+  temp-dir@1.0.0: {}
 
-  /temp-dir@1.0.0:
-    resolution: {integrity: sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==}
-    engines: {node: '>=4'}
-    dev: true
+  temp-dir@2.0.0: {}
 
-  /temp-dir@2.0.0:
-    resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==}
-    engines: {node: '>=8'}
-    dev: true
+  temp-path@1.0.0: {}
 
-  /temp-path@1.0.0:
-    resolution: {integrity: sha512-TvmyH7kC6ZVTYkqCODjJIbgvu0FKiwQpZ4D1aknE7xpcDf/qEOB8KZEK5ef2pfbVoiBhNWs3yx4y+ESMtNYmlg==}
-    dev: true
-
-  /tempy@0.6.0:
-    resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==}
-    engines: {node: '>=10'}
+  tempy@0.6.0:
     dependencies:
       is-stream: 2.0.1
       temp-dir: 2.0.0
       type-fest: 0.16.0
       unique-string: 2.0.0
-    dev: true
 
-  /terser@5.26.0:
-    resolution: {integrity: sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==}
-    engines: {node: '>=10'}
-    hasBin: true
+  terser@5.36.0:
     dependencies:
-      '@jridgewell/source-map': 0.3.5
-      acorn: 8.11.3
+      '@jridgewell/source-map': 0.3.6
+      acorn: 8.13.0
       commander: 2.20.3
       source-map-support: 0.5.21
-    dev: true
 
-  /test-value@1.1.0:
-    resolution: {integrity: sha512-wrsbRo7qP+2Je8x8DsK8ovCGyxe3sYfQwOraIY/09A2gFXU9DYKiTF14W4ki/01AEh56kMzAmlj9CaHGDDUBJA==}
-    engines: {node: '>=0.10.0'}
+  test-value@2.1.0:
     dependencies:
       array-back: 1.0.4
       typical: 2.6.1
-    dev: true
 
-  /test-value@2.1.0:
-    resolution: {integrity: sha512-+1epbAxtKeXttkGFMTX9H42oqzOTufR1ceCF+GYA5aOmvaPq9wd4PUS8329fn2RRLGNeUkgRLnVpycjx8DsO2w==}
-    engines: {node: '>=0.10.0'}
-    dependencies:
-      array-back: 1.0.4
-      typical: 2.6.1
-    dev: true
-
-  /test-value@3.0.0:
-    resolution: {integrity: sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==}
-    engines: {node: '>=4.0.0'}
+  test-value@3.0.0:
     dependencies:
       array-back: 2.0.0
       typical: 2.6.1
-    dev: true
 
-  /text-encoding-shim@1.0.5:
-    resolution: {integrity: sha512-H7yYW+jRn4yhu60ygZ2f/eMhXPITRt4QSUTKzLm+eCaDsdX8avmgWpmtmHAzesjBVUTAypz9odu5RKUjX5HNYA==}
-    dev: false
+  text-encoding-shim@1.0.5: {}
 
-  /text-extensions@1.9.0:
-    resolution: {integrity: sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==}
-    engines: {node: '>=0.10'}
-    dev: true
+  text-extensions@1.9.0: {}
 
-  /text-table@0.2.0:
-    resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
+  text-table@0.2.0: {}
 
-  /thenify-all@1.6.0:
-    resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
-    engines: {node: '>=0.8'}
+  thenify-all@1.6.0:
     dependencies:
       thenify: 3.3.1
-    dev: false
 
-  /thenify@3.3.1:
-    resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
+  thenify@3.3.1:
     dependencies:
       any-promise: 1.3.0
-    dev: false
 
-  /through2@2.0.5:
-    resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==}
+  through2@2.0.5:
     dependencies:
       readable-stream: 2.3.7
       xtend: 4.0.2
-    dev: true
 
-  /through@2.3.8:
-    resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
-    dev: true
+  through@2.3.8: {}
 
-  /tinybench@2.5.1:
-    resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==}
-    dev: true
+  tinybench@2.9.0: {}
 
-  /tinypool@0.8.1:
-    resolution: {integrity: sha512-zBTCK0cCgRROxvs9c0CGK838sPkeokNGdQVUUwHAbynHFlmyJYj825f/oRs528HaIJ97lo0pLIlDUzwN+IorWg==}
-    engines: {node: '>=14.0.0'}
-    dev: true
+  tinyexec@0.3.1: {}
 
-  /tinyspy@2.2.0:
-    resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==}
-    engines: {node: '>=14.0.0'}
-    dev: true
+  tinyglobby@0.2.9:
+    dependencies:
+      fdir: 6.4.2(picomatch@4.0.2)
+      picomatch: 4.0.2
 
-  /tmp@0.0.33:
-    resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
-    engines: {node: '>=0.6.0'}
+  tinypool@1.0.1: {}
+
+  tinyrainbow@1.2.0: {}
+
+  tinyspy@3.0.2: {}
+
+  tmp@0.0.33:
     dependencies:
       os-tmpdir: 1.0.2
-    dev: true
 
-  /tmp@0.2.1:
-    resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==}
-    engines: {node: '>=8.17.0'}
+  tmp@0.2.1:
     dependencies:
       rimraf: 3.0.2
-    dev: true
 
-  /to-fast-properties@2.0.0:
-    resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
-    engines: {node: '>=4'}
+  to-fast-properties@2.0.0: {}
 
-  /to-regex-range@5.0.1:
-    resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
-    engines: {node: '>=8.0'}
+  to-regex-range@5.0.1:
     dependencies:
       is-number: 7.0.0
 
-  /totalist@3.0.0:
-    resolution: {integrity: sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==}
-    engines: {node: '>=6'}
-    dev: true
+  totalist@3.0.1: {}
 
-  /tr46@0.0.3:
-    resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+  tr46@0.0.3: {}
 
-  /tr46@1.0.1:
-    resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==}
+  tr46@1.0.1:
     dependencies:
       punycode: 2.3.1
-    dev: true
 
-  /trim-lines@3.0.1:
-    resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
-
-  /trim-newlines@3.0.1:
-    resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==}
-    engines: {node: '>=8'}
-    dev: true
-
-  /trough@2.1.0:
-    resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==}
-
-  /ts-interface-checker@0.1.13:
-    resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
-    dev: false
-
-  /tsconfck@3.0.0(typescript@5.3.3):
-    resolution: {integrity: sha512-w3wnsIrJNi7avf4Zb0VjOoodoO0woEqGgZGQm+LHH9przdUI+XDKsWAXwxHA1DaRTjeuZNcregSzr7RaA8zG9A==}
-    engines: {node: ^18 || >=20}
-    hasBin: true
-    peerDependencies:
-      typescript: ^5.0.0
-    peerDependenciesMeta:
-      typescript:
-        optional: true
+  tree-sitter-haskell@0.21.0(tree-sitter@0.21.1):
     dependencies:
-      typescript: 5.3.3
+      node-addon-api: 8.0.0
+      node-gyp-build: 4.8.2
+      tree-sitter: 0.21.1
 
-  /tsconfig-paths@3.15.0:
-    resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
+  tree-sitter@0.21.1:
+    dependencies:
+      node-addon-api: 8.2.1
+      node-gyp-build: 4.8.2
+
+  treeverse@3.0.0: {}
+
+  trim-lines@3.0.1: {}
+
+  trim-newlines@3.0.1: {}
+
+  trough@2.2.0: {}
+
+  ts-interface-checker@0.1.13: {}
+
+  tsconfck@3.1.4(typescript@5.6.3):
+    optionalDependencies:
+      typescript: 5.6.3
+
+  tsconfig-paths@3.15.0:
     dependencies:
       '@types/json5': 0.0.29
       json5: 1.0.2
-      minimist: 1.2.7
+      minimist: 1.2.8
       strip-bom: 3.0.0
-    dev: true
 
-  /tsconfig-paths@4.2.0:
-    resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==}
-    engines: {node: '>=6'}
+  tsconfig-paths@4.2.0:
     dependencies:
       json5: 2.2.3
-      minimist: 1.2.7
+      minimist: 1.2.8
       strip-bom: 3.0.0
-    dev: true
 
-  /tslib@1.14.1:
-    resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
-    dev: true
+  tslib@1.14.1: {}
 
-  /tslib@2.5.0:
-    resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==}
+  tslib@2.8.0: {}
 
-  /tslib@2.6.2:
-    resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
-    requiresBuild: true
-
-  /tsutils@3.21.0(typescript@5.3.3):
-    resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
-    engines: {node: '>= 6'}
-    peerDependencies:
-      typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta'
+  tsutils@3.21.0(typescript@5.6.3):
     dependencies:
       tslib: 1.14.1
-      typescript: 5.3.3
-    dev: true
+      typescript: 5.6.3
 
-  /tuf-js@1.1.4:
-    resolution: {integrity: sha512-Lw2JRM3HTYhEtQJM2Th3aNCPbnXirtWMl065BawwmM2pX6XStH/ZO9e8T2hh0zk/HUa+1i6j+Lv6eDitKTau6A==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+  tuf-js@2.2.1:
     dependencies:
-      '@tufjs/models': 1.0.3
-      make-fetch-happen: 11.1.1
-    transitivePeerDependencies:
-      - bluebird
-      - supports-color
-    dev: true
-
-  /tuf-js@2.1.0:
-    resolution: {integrity: sha512-eD7YPPjVlMzdggrOeE8zwoegUaG/rt6Bt3jwoQPunRiNVzgcCE009UDFJKJjG+Gk9wFu6W/Vi+P5d/5QpdD9jA==}
-    engines: {node: ^16.14.0 || >=18.0.0}
-    dependencies:
-      '@tufjs/models': 2.0.0
-      debug: 4.3.4
-      make-fetch-happen: 13.0.0
+      '@tufjs/models': 2.0.1
+      debug: 4.3.7
+      make-fetch-happen: 13.0.1
     transitivePeerDependencies:
       - supports-color
-    dev: true
 
-  /tunnel-agent@0.6.0:
-    resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==}
+  tunnel-agent@0.6.0:
     dependencies:
       safe-buffer: 5.2.1
-    dev: true
 
-  /type-check@0.4.0:
-    resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
-    engines: {node: '>= 0.8.0'}
+  type-check@0.4.0:
     dependencies:
       prelude-ls: 1.2.1
 
-  /type-detect@4.0.8:
-    resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
-    engines: {node: '>=4'}
-    dev: true
+  type-fest@0.16.0: {}
 
-  /type-fest@0.16.0:
-    resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==}
-    engines: {node: '>=10'}
-    dev: true
+  type-fest@0.18.1: {}
 
-  /type-fest@0.18.1:
-    resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==}
-    engines: {node: '>=10'}
-    dev: true
+  type-fest@0.20.2: {}
 
-  /type-fest@0.20.2:
-    resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
-    engines: {node: '>=10'}
+  type-fest@0.21.3: {}
 
-  /type-fest@0.21.3:
-    resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
-    engines: {node: '>=10'}
-    dev: true
+  type-fest@0.4.1: {}
 
-  /type-fest@0.4.1:
-    resolution: {integrity: sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==}
-    engines: {node: '>=6'}
-    dev: true
+  type-fest@0.6.0: {}
 
-  /type-fest@0.6.0:
-    resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==}
-    engines: {node: '>=8'}
-    dev: true
+  type-fest@0.8.1: {}
 
-  /type-fest@0.8.1:
-    resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==}
-    engines: {node: '>=8'}
-    dev: true
+  type-fest@4.26.1: {}
 
-  /type-fest@2.19.0:
-    resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
-    engines: {node: '>=12.20'}
-
-  /typed-array-buffer@1.0.0:
-    resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==}
-    engines: {node: '>= 0.4'}
+  typed-array-buffer@1.0.0:
     dependencies:
       call-bind: 1.0.5
       get-intrinsic: 1.2.2
       is-typed-array: 1.1.12
-    dev: true
 
-  /typed-array-byte-length@1.0.0:
-    resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==}
-    engines: {node: '>= 0.4'}
+  typed-array-buffer@1.0.2:
+    dependencies:
+      call-bind: 1.0.7
+      es-errors: 1.3.0
+      is-typed-array: 1.1.13
+
+  typed-array-byte-length@1.0.0:
     dependencies:
       call-bind: 1.0.5
       for-each: 0.3.3
       has-proto: 1.0.1
       is-typed-array: 1.1.12
-    dev: true
 
-  /typed-array-byte-offset@1.0.0:
-    resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==}
-    engines: {node: '>= 0.4'}
+  typed-array-byte-length@1.0.1:
+    dependencies:
+      call-bind: 1.0.7
+      for-each: 0.3.3
+      gopd: 1.0.1
+      has-proto: 1.0.3
+      is-typed-array: 1.1.13
+
+  typed-array-byte-offset@1.0.0:
     dependencies:
       available-typed-arrays: 1.0.5
       call-bind: 1.0.5
       for-each: 0.3.3
       has-proto: 1.0.1
       is-typed-array: 1.1.12
-    dev: true
 
-  /typed-array-length@1.0.4:
-    resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==}
+  typed-array-byte-offset@1.0.2:
+    dependencies:
+      available-typed-arrays: 1.0.7
+      call-bind: 1.0.7
+      for-each: 0.3.3
+      gopd: 1.0.1
+      has-proto: 1.0.3
+      is-typed-array: 1.1.13
+
+  typed-array-length@1.0.4:
     dependencies:
       call-bind: 1.0.5
       for-each: 0.3.3
       is-typed-array: 1.1.12
-    dev: true
 
-  /typedarray@0.0.6:
-    resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
-    dev: true
+  typed-array-length@1.0.6:
+    dependencies:
+      call-bind: 1.0.7
+      for-each: 0.3.3
+      gopd: 1.0.1
+      has-proto: 1.0.3
+      is-typed-array: 1.1.13
+      possible-typed-array-names: 1.0.0
 
-  /typescript@5.3.3:
-    resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==}
-    engines: {node: '>=14.17'}
-    hasBin: true
+  typedarray@0.0.6: {}
 
-  /typical@2.6.1:
-    resolution: {integrity: sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg==}
-    dev: true
+  typescript@5.3.3: {}
 
-  /typical@4.0.0:
-    resolution: {integrity: sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==}
-    engines: {node: '>=8'}
-    dev: true
+  typescript@5.6.3: {}
 
-  /typical@6.0.1:
-    resolution: {integrity: sha512-+g3NEp7fJLe9DPa1TArHm9QAA7YciZmWnfAqEaFrBihQ7epOv9i99rjtgb6Iz0wh3WuQDjsCTDfgRoGnmHN81A==}
-    engines: {node: '>=10'}
-    dev: true
+  typical@2.6.1: {}
 
-  /uc.micro@1.0.6:
-    resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==}
-    dev: true
+  typical@4.0.0: {}
 
-  /ufo@1.1.2:
-    resolution: {integrity: sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ==}
-    dev: true
+  typical@7.2.0: {}
 
-  /ufo@1.3.2:
-    resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==}
-    dev: true
+  uc.micro@2.1.0: {}
 
-  /uglify-js@3.17.4:
-    resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==}
-    engines: {node: '>=0.8.0'}
-    hasBin: true
-    requiresBuild: true
-    dev: true
+  uglify-js@3.19.3:
     optional: true
 
-  /ultrahtml@1.5.2:
-    resolution: {integrity: sha512-qh4mBffhlkiXwDAOxvSGxhL0QEQsTbnP9BozOK3OYPEGvPvdWzvAUaXNtUSMdNsKDtuyjEbyVUPFZ52SSLhLqw==}
-    dev: false
+  ultrahtml@1.5.3: {}
 
-  /unbox-primitive@1.0.2:
-    resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
+  unbox-primitive@1.0.2:
     dependencies:
       call-bind: 1.0.5
       has-bigints: 1.0.2
       has-symbols: 1.0.3
       which-boxed-primitive: 1.0.2
-    dev: true
 
-  /underscore@1.13.6:
-    resolution: {integrity: sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==}
-    dev: true
+  underscore@1.13.6: {}
 
-  /undici-types@5.26.5:
-    resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+  undici-types@6.19.8: {}
 
-  /unherit@3.0.1:
-    resolution: {integrity: sha512-akOOQ/Yln8a2sgcLj4U0Jmx0R5jpIg2IUyRrWOzmEbjBtGzBdHtSeFKgoEcoH4KYIG/Pb8GQ/BwtYm0GCq1Sqg==}
+  unherit@3.0.1: {}
 
-  /unicode-canonical-property-names-ecmascript@2.0.0:
-    resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==}
-    engines: {node: '>=4'}
-    dev: true
+  unicode-canonical-property-names-ecmascript@2.0.1: {}
 
-  /unicode-match-property-ecmascript@2.0.0:
-    resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==}
-    engines: {node: '>=4'}
+  unicode-match-property-ecmascript@2.0.0:
     dependencies:
-      unicode-canonical-property-names-ecmascript: 2.0.0
+      unicode-canonical-property-names-ecmascript: 2.0.1
       unicode-property-aliases-ecmascript: 2.1.0
-    dev: true
 
-  /unicode-match-property-value-ecmascript@2.1.0:
-    resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==}
-    engines: {node: '>=4'}
-    dev: true
+  unicode-match-property-value-ecmascript@2.2.0: {}
 
-  /unicode-property-aliases-ecmascript@2.1.0:
-    resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==}
-    engines: {node: '>=4'}
-    dev: true
+  unicode-property-aliases-ecmascript@2.1.0: {}
 
-  /unified@10.1.2:
-    resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==}
+  unified@10.1.2:
     dependencies:
-      '@types/unist': 2.0.6
+      '@types/unist': 2.0.11
       bail: 2.0.2
       extend: 3.0.2
       is-buffer: 2.0.5
       is-plain-obj: 4.1.0
-      trough: 2.1.0
-      vfile: 5.3.6
+      trough: 2.2.0
+      vfile: 5.3.7
 
-  /unified@11.0.4:
-    resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==}
+  unified@11.0.4:
     dependencies:
-      '@types/unist': 3.0.1
+      '@types/unist': 3.0.3
       bail: 2.0.2
       devlop: 1.1.0
       extend: 3.0.2
       is-plain-obj: 4.1.0
-      trough: 2.1.0
-      vfile: 6.0.1
+      trough: 2.2.0
+      vfile: 6.0.3
 
-  /unique-filename@3.0.0:
-    resolution: {integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+  unified@11.0.5:
+    dependencies:
+      '@types/unist': 3.0.3
+      bail: 2.0.2
+      devlop: 1.1.0
+      extend: 3.0.2
+      is-plain-obj: 4.1.0
+      trough: 2.2.0
+      vfile: 6.0.3
+
+  unique-filename@3.0.0:
     dependencies:
       unique-slug: 4.0.0
-    dev: true
 
-  /unique-slug@4.0.0:
-    resolution: {integrity: sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+  unique-slug@4.0.0:
     dependencies:
       imurmurhash: 0.1.4
-    dev: true
 
-  /unique-string@2.0.0:
-    resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==}
-    engines: {node: '>=8'}
+  unique-string@2.0.0:
     dependencies:
       crypto-random-string: 2.0.0
-    dev: true
 
-  /unist-util-find-after@5.0.0:
-    resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==}
+  unist-util-find-after@5.0.0:
     dependencies:
-      '@types/unist': 3.0.1
+      '@types/unist': 3.0.3
       unist-util-is: 6.0.0
-    dev: false
 
-  /unist-util-is@3.0.0:
-    resolution: {integrity: sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==}
-    dev: false
+  unist-util-is@3.0.0: {}
 
-  /unist-util-is@5.2.0:
-    resolution: {integrity: sha512-Glt17jWwZeyqrFqOK0pF1Ded5U3yzJnFr8CG1GMjCWTp9zDo2p+cmD6pWbZU8AgM5WU3IzRv6+rBwhzsGh6hBQ==}
+  unist-util-is@5.2.1:
+    dependencies:
+      '@types/unist': 2.0.11
 
-  /unist-util-is@6.0.0:
-    resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==}
+  unist-util-is@6.0.0:
     dependencies:
       '@types/unist': 3.0.1
 
-  /unist-util-modify-children@3.1.1:
-    resolution: {integrity: sha512-yXi4Lm+TG5VG+qvokP6tpnk+r1EPwyYL04JWDxLvgvPV40jANh7nm3udk65OOWquvbMDe+PL9+LmkxDpTv/7BA==}
+  unist-util-modify-children@3.1.1:
     dependencies:
-      '@types/unist': 2.0.6
+      '@types/unist': 2.0.11
       array-iterate: 2.0.1
 
-  /unist-util-position-from-estree@2.0.0:
-    resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==}
+  unist-util-modify-children@4.0.0:
     dependencies:
-      '@types/unist': 3.0.1
-    dev: false
+      '@types/unist': 3.0.3
+      array-iterate: 2.0.1
 
-  /unist-util-position@5.0.0:
-    resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
+  unist-util-position-from-estree@2.0.0:
     dependencies:
-      '@types/unist': 3.0.1
+      '@types/unist': 3.0.3
 
-  /unist-util-remove-position@5.0.0:
-    resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==}
+  unist-util-position@5.0.0:
     dependencies:
-      '@types/unist': 3.0.1
+      '@types/unist': 3.0.3
+
+  unist-util-remove-position@5.0.0:
+    dependencies:
+      '@types/unist': 3.0.3
       unist-util-visit: 5.0.0
-    dev: false
 
-  /unist-util-stringify-position@3.0.3:
-    resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==}
+  unist-util-stringify-position@3.0.3:
     dependencies:
-      '@types/unist': 2.0.6
+      '@types/unist': 2.0.11
 
-  /unist-util-stringify-position@4.0.0:
-    resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
+  unist-util-stringify-position@4.0.0:
     dependencies:
-      '@types/unist': 3.0.1
+      '@types/unist': 3.0.3
 
-  /unist-util-visit-children@2.0.2:
-    resolution: {integrity: sha512-+LWpMFqyUwLGpsQxpumsQ9o9DG2VGLFrpz+rpVXYIEdPy57GSy5HioC0g3bg/8WP9oCLlapQtklOzQ8uLS496Q==}
+  unist-util-visit-children@2.0.2:
     dependencies:
-      '@types/unist': 2.0.6
+      '@types/unist': 2.0.11
 
-  /unist-util-visit-parents@2.1.2:
-    resolution: {integrity: sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==}
+  unist-util-visit-children@3.0.0:
+    dependencies:
+      '@types/unist': 3.0.3
+
+  unist-util-visit-parents@2.1.2:
     dependencies:
       unist-util-is: 3.0.0
-    dev: false
 
-  /unist-util-visit-parents@5.1.3:
-    resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==}
+  unist-util-visit-parents@5.1.3:
     dependencies:
-      '@types/unist': 2.0.6
-      unist-util-is: 5.2.0
+      '@types/unist': 2.0.11
+      unist-util-is: 5.2.1
 
-  /unist-util-visit-parents@6.0.1:
-    resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==}
+  unist-util-visit-parents@6.0.1:
     dependencies:
-      '@types/unist': 3.0.1
+      '@types/unist': 3.0.3
       unist-util-is: 6.0.0
 
-  /unist-util-visit@1.4.1:
-    resolution: {integrity: sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==}
+  unist-util-visit@1.4.1:
     dependencies:
       unist-util-visit-parents: 2.1.2
-    dev: false
 
-  /unist-util-visit@4.1.2:
-    resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==}
+  unist-util-visit@4.1.2:
     dependencies:
-      '@types/unist': 2.0.6
-      unist-util-is: 5.2.0
+      '@types/unist': 2.0.11
+      unist-util-is: 5.2.1
       unist-util-visit-parents: 5.1.3
 
-  /unist-util-visit@5.0.0:
-    resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
+  unist-util-visit@5.0.0:
     dependencies:
-      '@types/unist': 3.0.1
+      '@types/unist': 3.0.3
       unist-util-is: 6.0.0
       unist-util-visit-parents: 6.0.1
 
-  /universal-user-agent@6.0.0:
-    resolution: {integrity: sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==}
-    dev: true
+  universal-user-agent@6.0.0: {}
 
-  /universalify@2.0.0:
-    resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==}
-    engines: {node: '>= 10.0.0'}
-    dev: true
+  universalify@2.0.0: {}
 
-  /unmute-ios-audio@3.3.0:
-    resolution: {integrity: sha512-MmoCOrsS2gn3wLT2tT+hF56Q4V4kksIKn2LHrwAtX6umzQwQHDWSh1slMzH+0WuxTZ62s3w8/wsfIII1FQ7ACg==}
-    dev: false
+  universalify@2.0.1: {}
 
-  /upath@1.2.0:
-    resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==}
-    engines: {node: '>=4'}
-    dev: true
+  unmute-ios-audio@3.3.0: {}
 
-  /upath@2.0.1:
-    resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==}
-    engines: {node: '>=4'}
-    dev: true
+  upath@1.2.0: {}
 
-  /update-browserslist-db@1.0.13(browserslist@4.22.1):
-    resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==}
-    hasBin: true
-    peerDependencies:
-      browserslist: '>= 4.21.0'
+  upath@2.0.1: {}
+
+  update-browserslist-db@1.1.1(browserslist@4.24.0):
     dependencies:
-      browserslist: 4.22.1
-      escalade: 3.1.1
-      picocolors: 1.0.0
-    dev: false
+      browserslist: 4.24.0
+      escalade: 3.2.0
+      picocolors: 1.1.1
 
-  /update-browserslist-db@1.0.13(browserslist@4.22.2):
-    resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==}
-    hasBin: true
-    peerDependencies:
-      browserslist: '>= 4.21.0'
+  uri-js@4.4.1:
     dependencies:
-      browserslist: 4.22.2
-      escalade: 3.1.1
-      picocolors: 1.0.0
+      punycode: 2.3.1
 
-  /uri-js@4.4.1:
-    resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
-    dependencies:
-      punycode: 2.3.0
+  util-deprecate@1.0.2: {}
 
-  /util-deprecate@1.0.2:
-    resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+  uuid@10.0.0: {}
 
-  /uuid@9.0.1:
-    resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}
-    hasBin: true
-    dev: true
-
-  /validate-npm-package-license@3.0.4:
-    resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
+  validate-npm-package-license@3.0.4:
     dependencies:
       spdx-correct: 3.1.1
       spdx-expression-parse: 3.0.1
-    dev: true
 
-  /validate-npm-package-name@3.0.0:
-    resolution: {integrity: sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==}
-    dependencies:
-      builtins: 1.0.3
-    dev: true
+  validate-npm-package-name@5.0.1: {}
 
-  /validate-npm-package-name@5.0.0:
-    resolution: {integrity: sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+  vfile-location@5.0.2:
     dependencies:
-      builtins: 5.0.1
-    dev: true
+      '@types/unist': 3.0.3
+      vfile: 6.0.3
 
-  /vfile-location@5.0.2:
-    resolution: {integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==}
+  vfile-message@3.1.4:
     dependencies:
-      '@types/unist': 3.0.1
-      vfile: 6.0.1
-
-  /vfile-message@3.1.3:
-    resolution: {integrity: sha512-0yaU+rj2gKAyEk12ffdSbBfjnnj+b1zqTBv3OQCTn8yEB02bsPizwdBPrLJjHnK+cU9EMMcUnNv938XcZIkmdA==}
-    dependencies:
-      '@types/unist': 2.0.6
+      '@types/unist': 2.0.11
       unist-util-stringify-position: 3.0.3
 
-  /vfile-message@4.0.2:
-    resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==}
+  vfile-message@4.0.2:
     dependencies:
-      '@types/unist': 3.0.1
+      '@types/unist': 3.0.3
       unist-util-stringify-position: 4.0.0
 
-  /vfile@5.3.6:
-    resolution: {integrity: sha512-ADBsmerdGBs2WYckrLBEmuETSPyTD4TuLxTrw0DvjirxW1ra4ZwkbzG8ndsv3Q57smvHxo677MHaQrY9yxH8cA==}
+  vfile@5.3.7:
     dependencies:
-      '@types/unist': 2.0.6
+      '@types/unist': 2.0.11
       is-buffer: 2.0.5
       unist-util-stringify-position: 3.0.3
-      vfile-message: 3.1.3
+      vfile-message: 3.1.4
 
-  /vfile@6.0.1:
-    resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==}
+  vfile@6.0.3:
     dependencies:
-      '@types/unist': 3.0.1
-      unist-util-stringify-position: 4.0.0
+      '@types/unist': 3.0.3
       vfile-message: 4.0.2
 
-  /vinyl-sourcemaps-apply@0.2.1:
-    resolution: {integrity: sha512-+oDh3KYZBoZC8hfocrbrxbLUeaYtQK7J5WU5Br9VqWqmCll3tFJqKp97GC9GmMsVIL0qnx2DgEDVxdo5EZ5sSw==}
+  vinyl-sourcemaps-apply@0.2.1:
     dependencies:
       source-map: 0.5.7
-    dev: false
 
-  /vinyl@2.2.1:
-    resolution: {integrity: sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==}
-    engines: {node: '>= 0.10'}
+  vinyl@2.2.1:
     dependencies:
       clone: 2.1.2
       clone-buffer: 1.0.0
@@ -13927,235 +16511,103 @@ packages:
       cloneable-readable: 1.1.3
       remove-trailing-separator: 1.1.0
       replace-ext: 1.0.1
-    dev: false
 
-  /vite-node@1.1.0:
-    resolution: {integrity: sha512-jV48DDUxGLEBdHCQvxL1mEh7+naVy+nhUUUaPAZLd3FJgXuxQiewHcfeZebbJ6onDqNGkP4r3MhQ342PRlG81Q==}
-    engines: {node: ^18.0.0 || >=20.0.0}
-    hasBin: true
+  vite-node@2.1.3(@types/node@22.7.6)(terser@5.36.0):
     dependencies:
       cac: 6.7.14
-      debug: 4.3.4
-      pathe: 1.1.1
-      picocolors: 1.0.0
-      vite: 5.2.2(@types/node@20.10.6)
+      debug: 4.3.7
+      pathe: 1.1.2
+      vite: 5.4.9(@types/node@22.7.6)(terser@5.36.0)
     transitivePeerDependencies:
       - '@types/node'
       - less
       - lightningcss
       - sass
+      - sass-embedded
       - stylus
       - sugarss
       - supports-color
       - terser
-    dev: true
 
-  /vite-plugin-pwa@0.17.4(vite@5.2.2)(workbox-build@7.0.0)(workbox-window@7.0.0):
-    resolution: {integrity: sha512-j9iiyinFOYyof4Zk3Q+DtmYyDVBDAi6PuMGNGq6uGI0pw7E+LNm9e+nQ2ep9obMP/kjdWwzilqUrlfVRj9OobA==}
-    engines: {node: '>=16.0.0'}
-    peerDependencies:
-      vite: ^3.1.0 || ^4.0.0 || ^5.0.0
-      workbox-build: ^7.0.0
-      workbox-window: ^7.0.0
+  vite-plugin-pwa@0.17.5(vite@5.4.9(@types/node@20.16.12)(terser@5.36.0))(workbox-build@7.0.0(@types/babel__core@7.20.5))(workbox-window@7.1.0):
     dependencies:
-      debug: 4.3.4
+      debug: 4.3.7
       fast-glob: 3.3.2
       pretty-bytes: 6.1.1
-      vite: 5.2.2(@types/node@20.10.6)
-      workbox-build: 7.0.0
-      workbox-window: 7.0.0
+      vite: 5.4.9(@types/node@20.16.12)(terser@5.36.0)
+      workbox-build: 7.0.0(@types/babel__core@7.20.5)
+      workbox-window: 7.1.0
     transitivePeerDependencies:
       - supports-color
-    dev: true
 
-  /vite@5.0.10:
-    resolution: {integrity: sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==}
-    engines: {node: ^18.0.0 || >=20.0.0}
-    hasBin: true
-    peerDependencies:
-      '@types/node': ^18.0.0 || >=20.0.0
-      less: '*'
-      lightningcss: ^1.21.0
-      sass: '*'
-      stylus: '*'
-      sugarss: '*'
-      terser: ^5.4.0
-    peerDependenciesMeta:
-      '@types/node':
-        optional: true
-      less:
-        optional: true
-      lightningcss:
-        optional: true
-      sass:
-        optional: true
-      stylus:
-        optional: true
-      sugarss:
-        optional: true
-      terser:
-        optional: true
+  vite@5.4.9(@types/node@20.16.12)(terser@5.36.0):
     dependencies:
-      esbuild: 0.19.5
-      postcss: 8.4.32
-      rollup: 4.9.2
+      esbuild: 0.21.5
+      postcss: 8.4.47
+      rollup: 4.24.0
     optionalDependencies:
+      '@types/node': 20.16.12
       fsevents: 2.3.3
-    dev: true
+      terser: 5.36.0
 
-  /vite@5.0.11:
-    resolution: {integrity: sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA==}
-    engines: {node: ^18.0.0 || >=20.0.0}
-    hasBin: true
-    peerDependencies:
-      '@types/node': ^18.0.0 || >=20.0.0
-      less: '*'
-      lightningcss: ^1.21.0
-      sass: '*'
-      stylus: '*'
-      sugarss: '*'
-      terser: ^5.4.0
-    peerDependenciesMeta:
-      '@types/node':
-        optional: true
-      less:
-        optional: true
-      lightningcss:
-        optional: true
-      sass:
-        optional: true
-      stylus:
-        optional: true
-      sugarss:
-        optional: true
-      terser:
-        optional: true
+  vite@5.4.9(@types/node@22.7.6)(terser@5.36.0):
     dependencies:
-      esbuild: 0.19.11
-      postcss: 8.4.32
-      rollup: 4.9.2
+      esbuild: 0.21.5
+      postcss: 8.4.47
+      rollup: 4.24.0
     optionalDependencies:
+      '@types/node': 22.7.6
       fsevents: 2.3.3
-    dev: true
+      terser: 5.36.0
 
-  /vite@5.2.2(@types/node@20.10.6):
-    resolution: {integrity: sha512-FWZbz0oSdLq5snUI0b6sULbz58iXFXdvkZfZWR/F0ZJuKTSPO7v72QPXt6KqYeMFb0yytNp6kZosxJ96Nr/wDQ==}
-    engines: {node: ^18.0.0 || >=20.0.0}
-    hasBin: true
-    peerDependencies:
-      '@types/node': ^18.0.0 || >=20.0.0
-      less: '*'
-      lightningcss: ^1.21.0
-      sass: '*'
-      stylus: '*'
-      sugarss: '*'
-      terser: ^5.4.0
-    peerDependenciesMeta:
-      '@types/node':
-        optional: true
-      less:
-        optional: true
-      lightningcss:
-        optional: true
-      sass:
-        optional: true
-      stylus:
-        optional: true
-      sugarss:
-        optional: true
-      terser:
-        optional: true
-    dependencies:
-      '@types/node': 20.10.6
-      esbuild: 0.20.2
-      postcss: 8.4.38
-      rollup: 4.13.0
+  vitefu@1.0.3(vite@5.4.9(@types/node@20.16.12)(terser@5.36.0)):
     optionalDependencies:
-      fsevents: 2.3.3
+      vite: 5.4.9(@types/node@20.16.12)(terser@5.36.0)
 
-  /vitefu@0.2.5(vite@5.2.2):
-    resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==}
-    peerDependencies:
-      vite: ^3.0.0 || ^4.0.0 || ^5.0.0
-    peerDependenciesMeta:
-      vite:
-        optional: true
+  vitest@2.1.3(@types/node@22.7.6)(@vitest/ui@2.1.3)(terser@5.36.0):
     dependencies:
-      vite: 5.2.2(@types/node@20.10.6)
-
-  /vitest@1.1.0(@vitest/ui@1.1.0):
-    resolution: {integrity: sha512-oDFiCrw7dd3Jf06HoMtSRARivvyjHJaTxikFxuqJjO76U436PqlVw1uLn7a8OSPrhSfMGVaRakKpA2lePdw79A==}
-    engines: {node: ^18.0.0 || >=20.0.0}
-    hasBin: true
-    peerDependencies:
-      '@edge-runtime/vm': '*'
-      '@types/node': ^18.0.0 || >=20.0.0
-      '@vitest/browser': ^1.0.0
-      '@vitest/ui': ^1.0.0
-      happy-dom: '*'
-      jsdom: '*'
-    peerDependenciesMeta:
-      '@edge-runtime/vm':
-        optional: true
-      '@types/node':
-        optional: true
-      '@vitest/browser':
-        optional: true
-      '@vitest/ui':
-        optional: true
-      happy-dom:
-        optional: true
-      jsdom:
-        optional: true
-    dependencies:
-      '@vitest/expect': 1.1.0
-      '@vitest/runner': 1.1.0
-      '@vitest/snapshot': 1.1.0
-      '@vitest/spy': 1.1.0
-      '@vitest/ui': 1.1.0(vitest@1.1.0)
-      '@vitest/utils': 1.1.0
-      acorn-walk: 8.3.1
-      cac: 6.7.14
-      chai: 4.3.10
-      debug: 4.3.4
-      execa: 8.0.1
-      local-pkg: 0.5.0
-      magic-string: 0.30.5
-      pathe: 1.1.1
-      picocolors: 1.0.0
+      '@vitest/expect': 2.1.3
+      '@vitest/mocker': 2.1.3(@vitest/spy@2.1.3)(vite@5.4.9(@types/node@22.7.6)(terser@5.36.0))
+      '@vitest/pretty-format': 2.1.3
+      '@vitest/runner': 2.1.3
+      '@vitest/snapshot': 2.1.3
+      '@vitest/spy': 2.1.3
+      '@vitest/utils': 2.1.3
+      chai: 5.1.1
+      debug: 4.3.7
+      magic-string: 0.30.12
+      pathe: 1.1.2
       std-env: 3.7.0
-      strip-literal: 1.3.0
-      tinybench: 2.5.1
-      tinypool: 0.8.1
-      vite: 5.0.11
-      vite-node: 1.1.0
-      why-is-node-running: 2.2.2
+      tinybench: 2.9.0
+      tinyexec: 0.3.1
+      tinypool: 1.0.1
+      tinyrainbow: 1.2.0
+      vite: 5.4.9(@types/node@22.7.6)(terser@5.36.0)
+      vite-node: 2.1.3(@types/node@22.7.6)(terser@5.36.0)
+      why-is-node-running: 2.3.0
+    optionalDependencies:
+      '@types/node': 22.7.6
+      '@vitest/ui': 2.1.3(vitest@2.1.3)
     transitivePeerDependencies:
       - less
       - lightningcss
+      - msw
       - sass
+      - sass-embedded
       - stylus
       - sugarss
       - supports-color
       - terser
-    dev: true
 
-  /w3c-keyname@2.2.6:
-    resolution: {integrity: sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg==}
-    dev: false
+  w3c-keyname@2.2.6: {}
 
-  /walk-back@2.0.1:
-    resolution: {integrity: sha512-Nb6GvBR8UWX1D+Le+xUq0+Q1kFmRBIWVrfLnQAOmcpEzA9oAxwJ9gIr36t9TWYfzvWRvuMtjHiVsJYEkXWaTAQ==}
-    engines: {node: '>=0.10.0'}
-    dev: true
+  walk-back@2.0.1: {}
 
-  /walk-back@5.1.0:
-    resolution: {integrity: sha512-Uhxps5yZcVNbLEAnb+xaEEMdgTXl9qAQDzKYejG2AZ7qPwRQ81lozY9ECDbjLPNWm7YsO1IK5rsP1KoQzXAcGA==}
-    engines: {node: '>=12.17'}
-    dev: true
+  walk-back@5.1.1: {}
 
-  /wav@1.0.2:
-    resolution: {integrity: sha512-viHtz3cDd/Tcr/HbNqzQCofKdF6kWUymH9LGDdskfWFoIy/HJ+RTihgjEcHfnsy1PO4e9B+y4HwgTwMrByquhg==}
+  walk-up-path@3.0.1: {}
+
+  wav@1.0.2:
     dependencies:
       buffer-alloc: 1.2.0
       buffer-from: 1.1.2
@@ -14164,183 +16616,130 @@ packages:
       stream-parser: 0.3.1
     transitivePeerDependencies:
       - supports-color
-    dev: false
 
-  /wcwidth@1.0.1:
-    resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
+  wcwidth@1.0.1:
     dependencies:
       defaults: 1.0.4
-    dev: true
 
-  /web-midi-api@2.2.2:
-    resolution: {integrity: sha512-lQFqcdmzoxLx1833DOC4bavfk9Cp5bjkC5SlZAceqsuUoc2j+fYSbqv45XwJqeECkCUXzB9UQ8wyWr40ppINhw==}
+  web-midi-api@2.2.2:
     dependencies:
-      jzz: 1.5.9
-    dev: false
+      jzz: 1.8.6
 
-  /web-namespaces@2.0.1:
-    resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==}
+  web-namespaces@2.0.1: {}
 
-  /web-streams-polyfill@3.2.1:
-    resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==}
-    engines: {node: '>= 8'}
-    dev: true
+  web-streams-polyfill@3.2.1: {}
 
-  /webidl-conversions@3.0.1:
-    resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+  web-tree-sitter@0.20.8: {}
 
-  /webidl-conversions@4.0.2:
-    resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
-    dev: true
+  webidl-conversions@3.0.1: {}
 
-  /webmidi@3.1.8:
-    resolution: {integrity: sha512-PCRic1iTpKxeheb888G0mDe6MBdz/u+s/xfdV6+1ZhZnS6dKtV9gMBth5cpmMip2Livv5lL+ep4/S9DCzHfumg==}
-    engines: {node: '>=8.5'}
+  webidl-conversions@4.0.2: {}
+
+  webmidi@3.1.11:
     dependencies:
       djipevents: 2.0.7
     optionalDependencies:
-      jzz: 1.7.7
-    dev: false
+      jzz: 1.8.6
 
-  /whatwg-url@5.0.0:
-    resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+  whatwg-url@5.0.0:
     dependencies:
       tr46: 0.0.3
       webidl-conversions: 3.0.1
 
-  /whatwg-url@7.1.0:
-    resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==}
+  whatwg-url@7.1.0:
     dependencies:
       lodash.sortby: 4.7.0
       tr46: 1.0.1
       webidl-conversions: 4.0.2
-    dev: true
 
-  /which-boxed-primitive@1.0.2:
-    resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
+  which-boxed-primitive@1.0.2:
     dependencies:
       is-bigint: 1.0.4
       is-boolean-object: 1.1.2
       is-number-object: 1.0.7
       is-string: 1.0.7
       is-symbol: 1.0.4
-    dev: true
 
-  /which-module@2.0.1:
-    resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==}
-    dev: false
+  which-module@2.0.1: {}
 
-  /which-pm-runs@1.1.0:
-    resolution: {integrity: sha512-n1brCuqClxfFfq/Rb0ICg9giSZqCS+pLtccdag6C2HyufBrh3fBOiy9nb6ggRMvWOVH5GrdJskj5iGTZNxd7SA==}
-    engines: {node: '>=4'}
+  which-pm-runs@1.1.0: {}
 
-  /which-pm@2.0.0:
-    resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==}
-    engines: {node: '>=8.15'}
+  which-pm@3.0.0:
     dependencies:
       load-yaml-file: 0.2.0
-      path-exists: 4.0.0
 
-  /which-pm@2.1.1:
-    resolution: {integrity: sha512-xzzxNw2wMaoCWXiGE8IJ9wuPMU+EYhFksjHxrRT8kMT5SnocBPRg69YAMtyV4D12fP582RA+k3P8H9J5EMdIxQ==}
-    engines: {node: '>=8.15'}
-    dependencies:
-      load-yaml-file: 0.2.0
-      path-exists: 4.0.0
-
-  /which-typed-array@1.1.13:
-    resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==}
-    engines: {node: '>= 0.4'}
+  which-typed-array@1.1.13:
     dependencies:
       available-typed-arrays: 1.0.5
       call-bind: 1.0.5
       for-each: 0.3.3
       gopd: 1.0.1
       has-tostringtag: 1.0.0
-    dev: true
 
-  /which@2.0.2:
-    resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
-    engines: {node: '>= 8'}
-    hasBin: true
+  which-typed-array@1.1.15:
+    dependencies:
+      available-typed-arrays: 1.0.7
+      call-bind: 1.0.7
+      for-each: 0.3.3
+      gopd: 1.0.1
+      has-tostringtag: 1.0.2
+
+  which@2.0.2:
     dependencies:
       isexe: 2.0.0
 
-  /which@4.0.0:
-    resolution: {integrity: sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==}
-    engines: {node: ^16.13.0 || >=18.0.0}
-    hasBin: true
+  which@4.0.0:
     dependencies:
       isexe: 3.1.1
-    dev: true
 
-  /why-is-node-running@2.2.2:
-    resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==}
-    engines: {node: '>=8'}
-    hasBin: true
+  why-is-node-running@2.3.0:
     dependencies:
       siginfo: 2.0.0
       stackback: 0.0.2
-    dev: true
 
-  /wide-align@1.1.5:
-    resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==}
+  wide-align@1.1.5:
     dependencies:
       string-width: 4.2.3
-    dev: true
 
-  /widest-line@4.0.1:
-    resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==}
-    engines: {node: '>=12'}
+  widest-line@5.0.0:
     dependencies:
-      string-width: 5.1.2
+      string-width: 7.2.0
 
-  /wordwrap@1.0.0:
-    resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
-    dev: true
+  wordwrap@1.0.0: {}
 
-  /wordwrapjs@3.0.0:
-    resolution: {integrity: sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==}
-    engines: {node: '>=4.0.0'}
+  wordwrapjs@3.0.0:
     dependencies:
       reduce-flatten: 1.0.1
       typical: 2.6.1
-    dev: true
 
-  /workbox-background-sync@7.0.0:
-    resolution: {integrity: sha512-S+m1+84gjdueM+jIKZ+I0Lx0BDHkk5Nu6a3kTVxP4fdj3gKouRNmhO8H290ybnJTOPfBDtTMXSQA/QLTvr7PeA==}
+  workbox-background-sync@7.0.0:
     dependencies:
       idb: 7.1.1
       workbox-core: 7.0.0
-    dev: true
 
-  /workbox-broadcast-update@7.0.0:
-    resolution: {integrity: sha512-oUuh4jzZrLySOo0tC0WoKiSg90bVAcnE98uW7F8GFiSOXnhogfNDGZelPJa+6KpGBO5+Qelv04Hqx2UD+BJqNQ==}
+  workbox-broadcast-update@7.0.0:
     dependencies:
       workbox-core: 7.0.0
-    dev: true
 
-  /workbox-build@7.0.0:
-    resolution: {integrity: sha512-CttE7WCYW9sZC+nUYhQg3WzzGPr4IHmrPnjKiu3AMXsiNQKx+l4hHl63WTrnicLmKEKHScWDH8xsGBdrYgtBzg==}
-    engines: {node: '>=16.0.0'}
+  workbox-build@7.0.0(@types/babel__core@7.20.5):
     dependencies:
-      '@apideck/better-ajv-errors': 0.3.6(ajv@8.12.0)
-      '@babel/core': 7.23.7
-      '@babel/preset-env': 7.23.7(@babel/core@7.23.7)
-      '@babel/runtime': 7.24.1
-      '@rollup/plugin-babel': 5.3.1(@babel/core@7.23.7)(rollup@2.79.1)
-      '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1)
-      '@rollup/plugin-replace': 2.4.2(rollup@2.79.1)
+      '@apideck/better-ajv-errors': 0.3.6(ajv@8.17.1)
+      '@babel/core': 7.25.8
+      '@babel/preset-env': 7.25.8(@babel/core@7.25.8)
+      '@babel/runtime': 7.25.7
+      '@rollup/plugin-babel': 5.3.1(@babel/core@7.25.8)(@types/babel__core@7.20.5)(rollup@2.79.2)
+      '@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.2)
+      '@rollup/plugin-replace': 2.4.2(rollup@2.79.2)
       '@surma/rollup-plugin-off-main-thread': 2.2.3
-      ajv: 8.12.0
+      ajv: 8.17.1
       common-tags: 1.8.2
       fast-json-stable-stringify: 2.1.0
       fs-extra: 9.1.0
       glob: 7.2.3
       lodash: 4.17.21
       pretty-bytes: 5.6.0
-      rollup: 2.79.1
-      rollup-plugin-terser: 7.0.2(rollup@2.79.1)
+      rollup: 2.79.2
+      rollup-plugin-terser: 7.0.2(rollup@2.79.2)
       source-map: 0.8.0-beta.0
       stringify-object: 3.3.0
       strip-comments: 2.0.1
@@ -14364,56 +16763,42 @@ packages:
     transitivePeerDependencies:
       - '@types/babel__core'
       - supports-color
-    dev: true
 
-  /workbox-cacheable-response@7.0.0:
-    resolution: {integrity: sha512-0lrtyGHn/LH8kKAJVOQfSu3/80WDc9Ma8ng0p2i/5HuUndGttH+mGMSvOskjOdFImLs2XZIimErp7tSOPmu/6g==}
+  workbox-cacheable-response@7.0.0:
     dependencies:
       workbox-core: 7.0.0
-    dev: true
 
-  /workbox-core@7.0.0:
-    resolution: {integrity: sha512-81JkAAZtfVP8darBpfRTovHg8DGAVrKFgHpOArZbdFd78VqHr5Iw65f2guwjE2NlCFbPFDoez3D3/6ZvhI/rwQ==}
-    dev: true
+  workbox-core@7.0.0: {}
 
-  /workbox-expiration@7.0.0:
-    resolution: {integrity: sha512-MLK+fogW+pC3IWU9SFE+FRStvDVutwJMR5if1g7oBJx3qwmO69BNoJQVaMXq41R0gg3MzxVfwOGKx3i9P6sOLQ==}
+  workbox-core@7.1.0: {}
+
+  workbox-expiration@7.0.0:
     dependencies:
       idb: 7.1.1
       workbox-core: 7.0.0
-    dev: true
 
-  /workbox-google-analytics@7.0.0:
-    resolution: {integrity: sha512-MEYM1JTn/qiC3DbpvP2BVhyIH+dV/5BjHk756u9VbwuAhu0QHyKscTnisQuz21lfRpOwiS9z4XdqeVAKol0bzg==}
+  workbox-google-analytics@7.0.0:
     dependencies:
       workbox-background-sync: 7.0.0
       workbox-core: 7.0.0
       workbox-routing: 7.0.0
       workbox-strategies: 7.0.0
-    dev: true
 
-  /workbox-navigation-preload@7.0.0:
-    resolution: {integrity: sha512-juWCSrxo/fiMz3RsvDspeSLGmbgC0U9tKqcUPZBCf35s64wlaLXyn2KdHHXVQrb2cqF7I0Hc9siQalainmnXJA==}
+  workbox-navigation-preload@7.0.0:
     dependencies:
       workbox-core: 7.0.0
-    dev: true
 
-  /workbox-precaching@7.0.0:
-    resolution: {integrity: sha512-EC0vol623LJqTJo1mkhD9DZmMP604vHqni3EohhQVwhJlTgyKyOkMrZNy5/QHfOby+39xqC01gv4LjOm4HSfnA==}
+  workbox-precaching@7.0.0:
     dependencies:
       workbox-core: 7.0.0
       workbox-routing: 7.0.0
       workbox-strategies: 7.0.0
-    dev: true
 
-  /workbox-range-requests@7.0.0:
-    resolution: {integrity: sha512-SxAzoVl9j/zRU9OT5+IQs7pbJBOUOlriB8Gn9YMvi38BNZRbM+RvkujHMo8FOe9IWrqqwYgDFBfv6sk76I1yaQ==}
+  workbox-range-requests@7.0.0:
     dependencies:
       workbox-core: 7.0.0
-    dev: true
 
-  /workbox-recipes@7.0.0:
-    resolution: {integrity: sha512-DntcK9wuG3rYQOONWC0PejxYYIDHyWWZB/ueTbOUDQgefaeIj1kJ7pdP3LZV2lfrj8XXXBWt+JDRSw1lLLOnww==}
+  workbox-recipes@7.0.0:
     dependencies:
       workbox-cacheable-response: 7.0.0
       workbox-core: 7.0.0
@@ -14421,111 +16806,89 @@ packages:
       workbox-precaching: 7.0.0
       workbox-routing: 7.0.0
       workbox-strategies: 7.0.0
-    dev: true
 
-  /workbox-routing@7.0.0:
-    resolution: {integrity: sha512-8YxLr3xvqidnbVeGyRGkaV4YdlKkn5qZ1LfEePW3dq+ydE73hUUJJuLmGEykW3fMX8x8mNdL0XrWgotcuZjIvA==}
+  workbox-routing@7.0.0:
     dependencies:
       workbox-core: 7.0.0
-    dev: true
 
-  /workbox-strategies@7.0.0:
-    resolution: {integrity: sha512-dg3qJU7tR/Gcd/XXOOo7x9QoCI9nk74JopaJaYAQ+ugLi57gPsXycVdBnYbayVj34m6Y8ppPwIuecrzkpBVwbA==}
+  workbox-strategies@7.0.0:
     dependencies:
       workbox-core: 7.0.0
-    dev: true
 
-  /workbox-streams@7.0.0:
-    resolution: {integrity: sha512-moVsh+5to//l6IERWceYKGiftc+prNnqOp2sgALJJFbnNVpTXzKISlTIsrWY+ogMqt+x1oMazIdHj25kBSq/HQ==}
+  workbox-streams@7.0.0:
     dependencies:
       workbox-core: 7.0.0
       workbox-routing: 7.0.0
-    dev: true
 
-  /workbox-sw@7.0.0:
-    resolution: {integrity: sha512-SWfEouQfjRiZ7GNABzHUKUyj8pCoe+RwjfOIajcx6J5mtgKkN+t8UToHnpaJL5UVVOf5YhJh+OHhbVNIHe+LVA==}
-    dev: true
+  workbox-sw@7.0.0: {}
 
-  /workbox-window@7.0.0:
-    resolution: {integrity: sha512-j7P/bsAWE/a7sxqTzXo3P2ALb1reTfZdvVp6OJ/uLr/C2kZAMvjeWGm8V4htQhor7DOvYg0sSbFN2+flT5U0qA==}
+  workbox-window@7.0.0:
+    dependencies:
+      '@types/trusted-types': 2.0.7
+      workbox-core: 7.0.0
+
+  workbox-window@7.1.0:
     dependencies:
       '@types/trusted-types': 2.0.2
-      workbox-core: 7.0.0
-    dev: true
+      workbox-core: 7.1.0
 
-  /worker-timers-broker@6.1.4:
-    resolution: {integrity: sha512-y3D+Yfj37lrItEMIlcfCm/IRueYtYKgpLlTG2wgTIZ9PSw0n/K4kweilgk3gTC4ahbQNVGT90lU+Rf7W4M5bsw==}
+  worker-timers-broker@6.1.8:
     dependencies:
-      '@babel/runtime': 7.24.1
+      '@babel/runtime': 7.25.7
       fast-unique-numbers: 8.0.13
-      tslib: 2.6.2
-      worker-timers-worker: 7.0.67
-    dev: false
+      tslib: 2.8.0
+      worker-timers-worker: 7.0.71
 
-  /worker-timers-worker@7.0.67:
-    resolution: {integrity: sha512-0ZP2+v2fyiiiGaCEdWxMRUk5YxGFwWdRGB12ZfQy13vw8/27Xd+MW3ua56qlcM30nzjpddXXzLuEpHhGW+Pz7w==}
+  worker-timers-worker@7.0.71:
     dependencies:
-      '@babel/runtime': 7.24.1
-      tslib: 2.6.2
-    dev: false
+      '@babel/runtime': 7.25.7
+      tslib: 2.8.0
 
-  /worker-timers@7.1.4:
-    resolution: {integrity: sha512-8PRtiPAyeYukrY+iOUL+0tq4Zn5qyCHrTqFTtHxcESfIxGyulxNwyzQkybrYBKhnMWmx0bku3wxRfE1hts5R6Q==}
+  worker-timers@7.1.8:
     dependencies:
-      '@babel/runtime': 7.24.1
-      tslib: 2.6.2
-      worker-timers-broker: 6.1.4
-      worker-timers-worker: 7.0.67
-    dev: false
+      '@babel/runtime': 7.25.7
+      tslib: 2.8.0
+      worker-timers-broker: 6.1.8
+      worker-timers-worker: 7.0.71
 
-  /wrap-ansi@6.2.0:
-    resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
-    engines: {node: '>=8'}
+  wrap-ansi@6.2.0:
     dependencies:
       ansi-styles: 4.3.0
       string-width: 4.2.3
       strip-ansi: 6.0.1
-    dev: false
 
-  /wrap-ansi@7.0.0:
-    resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
-    engines: {node: '>=10'}
+  wrap-ansi@7.0.0:
     dependencies:
       ansi-styles: 4.3.0
       string-width: 4.2.3
       strip-ansi: 6.0.1
-    dev: true
 
-  /wrap-ansi@8.1.0:
-    resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
-    engines: {node: '>=12'}
+  wrap-ansi@8.1.0:
     dependencies:
       ansi-styles: 6.2.1
       string-width: 5.1.2
       strip-ansi: 7.1.0
 
-  /wrappy@1.0.2:
-    resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+  wrap-ansi@9.0.0:
+    dependencies:
+      ansi-styles: 6.2.1
+      string-width: 7.2.0
+      strip-ansi: 7.1.0
 
-  /write-file-atomic@2.4.3:
-    resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==}
+  wrappy@1.0.2: {}
+
+  write-file-atomic@2.4.3:
     dependencies:
       graceful-fs: 4.2.11
       imurmurhash: 0.1.4
       signal-exit: 3.0.7
-    dev: true
 
-  /write-file-atomic@5.0.1:
-    resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==}
-    engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+  write-file-atomic@5.0.1:
     dependencies:
       imurmurhash: 0.1.4
       signal-exit: 4.1.0
-    dev: true
 
-  /write-json-file@3.2.0:
-    resolution: {integrity: sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==}
-    engines: {node: '>=6'}
+  write-json-file@3.2.0:
     dependencies:
       detect-indent: 5.0.0
       graceful-fs: 4.2.11
@@ -14533,92 +16896,41 @@ packages:
       pify: 4.0.1
       sort-keys: 2.0.0
       write-file-atomic: 2.4.3
-    dev: true
 
-  /write-pkg@4.0.0:
-    resolution: {integrity: sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==}
-    engines: {node: '>=8'}
+  write-pkg@4.0.0:
     dependencies:
       sort-keys: 2.0.0
       type-fest: 0.4.1
       write-json-file: 3.2.0
-    dev: true
 
-  /ws@8.12.0:
-    resolution: {integrity: sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==}
-    engines: {node: '>=10.0.0'}
-    peerDependencies:
-      bufferutil: ^4.0.1
-      utf-8-validate: '>=5.0.2'
-    peerDependenciesMeta:
-      bufferutil:
-        optional: true
-      utf-8-validate:
-        optional: true
-    dev: false
+  ws@8.18.0: {}
 
-  /ws@8.16.0:
-    resolution: {integrity: sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==}
-    engines: {node: '>=10.0.0'}
-    peerDependencies:
-      bufferutil: ^4.0.1
-      utf-8-validate: '>=5.0.2'
-    peerDependenciesMeta:
-      bufferutil:
-        optional: true
-      utf-8-validate:
-        optional: true
-    dev: false
+  xmlcreate@2.0.4: {}
 
-  /xmlcreate@2.0.4:
-    resolution: {integrity: sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==}
-    dev: true
+  xtend@4.0.2: {}
 
-  /xtend@4.0.2:
-    resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==}
-    engines: {node: '>=0.4'}
-    dev: true
+  xxhash-wasm@1.0.2: {}
 
-  /y18n@4.0.3:
-    resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==}
-    dev: false
+  y18n@4.0.3: {}
 
-  /y18n@5.0.8:
-    resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
-    engines: {node: '>=10'}
-    dev: true
+  y18n@5.0.8: {}
 
-  /yallist@3.1.1:
-    resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+  yallist@3.1.1: {}
 
-  /yallist@4.0.0:
-    resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+  yallist@4.0.0: {}
 
-  /yaml@2.3.4:
-    resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==}
-    engines: {node: '>= 14'}
-    dev: false
+  yaml@2.3.4: {}
 
-  /yargs-parser@18.1.3:
-    resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==}
-    engines: {node: '>=6'}
+  yargs-parser@18.1.3:
     dependencies:
       camelcase: 5.3.1
       decamelize: 1.2.0
-    dev: false
 
-  /yargs-parser@20.2.9:
-    resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==}
-    engines: {node: '>=10'}
-    dev: true
+  yargs-parser@20.2.9: {}
 
-  /yargs-parser@21.1.1:
-    resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==}
-    engines: {node: '>=12'}
+  yargs-parser@21.1.1: {}
 
-  /yargs@15.4.1:
-    resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==}
-    engines: {node: '>=8'}
+  yargs@15.4.1:
     dependencies:
       cliui: 6.0.0
       decamelize: 1.2.0
@@ -14631,11 +16943,8 @@ packages:
       which-module: 2.0.1
       y18n: 4.0.3
       yargs-parser: 18.1.3
-    dev: false
 
-  /yargs@16.2.0:
-    resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==}
-    engines: {node: '>=10'}
+  yargs@16.2.0:
     dependencies:
       cliui: 7.0.4
       escalade: 3.1.1
@@ -14644,11 +16953,8 @@ packages:
       string-width: 4.2.3
       y18n: 5.0.8
       yargs-parser: 20.2.9
-    dev: true
 
-  /yargs@17.7.2:
-    resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
-    engines: {node: '>=12'}
+  yargs@17.7.2:
     dependencies:
       cliui: 8.0.1
       escalade: 3.1.1
@@ -14657,18 +16963,20 @@ packages:
       string-width: 4.2.3
       y18n: 5.0.8
       yargs-parser: 21.1.1
-    dev: true
 
-  /yocto-queue@0.1.0:
-    resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
-    engines: {node: '>=10'}
+  yocto-queue@0.1.0: {}
 
-  /yocto-queue@1.0.0:
-    resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==}
-    engines: {node: '>=12.20'}
+  yocto-queue@1.1.1: {}
 
-  /zod@3.22.4:
-    resolution: {integrity: sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==}
+  zod-to-json-schema@3.23.3(zod@3.23.8):
+    dependencies:
+      zod: 3.23.8
 
-  /zwitch@2.0.4:
-    resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
+  zod-to-ts@1.2.0(typescript@5.6.3)(zod@3.23.8):
+    dependencies:
+      typescript: 5.6.3
+      zod: 3.23.8
+
+  zod@3.23.8: {}
+
+  zwitch@2.0.4: {}
diff --git a/src-tauri/src/oscbridge.rs b/src-tauri/src/oscbridge.rs
index c8dcf03a..f6ac84a7 100644
--- a/src-tauri/src/oscbridge.rs
+++ b/src-tauri/src/oscbridge.rs
@@ -6,13 +6,13 @@ use std::net::UdpSocket;
 use serde::Deserialize;
 use std::sync::Arc;
 use std::thread::sleep;
-use std::time::Duration;
+use std::time::{Duration};
 use tokio::sync::{mpsc, Mutex};
 
 use crate::loggerbridge::Logger;
 pub struct OscMsg {
     pub msg_buf: Vec,
-    pub timestamp: u64,
+    pub timestamp: f64,
 }
 
 pub struct AsyncInputTransmit {
@@ -106,7 +106,7 @@ pub struct Param {
 #[derive(Deserialize)]
 pub struct MessageFromJS {
     params: Vec,
-    timestamp: u64,
+    timestamp: f64,
     target: String,
 }
 // Called from JS
@@ -127,9 +127,11 @@ pub async fn sendosc(
                 args.push(OscType::String(p.value));
             }
         }
+        // let start = SystemTime::now().duration_since(UNIX_EPOCH).unwrap();
 
+        let time_delay = Duration::from_secs_f64(m.timestamp);
         let duration_since_epoch =
-            Duration::from_millis(m.timestamp) + Duration::new(UNIX_OFFSET, 0);
+        time_delay + Duration::new(UNIX_OFFSET, 0);
 
         let seconds = u32::try_from(duration_since_epoch.as_secs())
             .map_err(|_| "bit conversion failed for osc message timetag")?;
diff --git a/test/__snapshots__/examples.test.mjs.snap b/test/__snapshots__/examples.test.mjs.snap
index 30db05a2..7c21d464 100644
--- a/test/__snapshots__/examples.test.mjs.snap
+++ b/test/__snapshots__/examples.test.mjs.snap
@@ -967,6 +967,156 @@ exports[`runs examples > example "begin" example index 0 1`] = `
 ]
 `;
 
+exports[`runs examples > example "bite" example index 0 1`] = `
+[
+  "[ 0/1 → 1/8 | note:Bb3 ]",
+  "[ 1/8 → 1/4 | note:C4 ]",
+  "[ 1/4 → 3/8 | note:G3 ]",
+  "[ 3/8 → 1/2 | note:A3 ]",
+  "[ 1/2 → 5/8 | note:E3 ]",
+  "[ 5/8 → 3/4 | note:F3 ]",
+  "[ 3/4 → 7/8 | note:C3 ]",
+  "[ 7/8 → 1/1 | note:D3 ]",
+  "[ 1/1 → 9/8 | note:Bb3 ]",
+  "[ 9/8 → 5/4 | note:C4 ]",
+  "[ 5/4 → 11/8 | note:G3 ]",
+  "[ 11/8 → 3/2 | note:A3 ]",
+  "[ 3/2 → 13/8 | note:E3 ]",
+  "[ 13/8 → 7/4 | note:F3 ]",
+  "[ 7/4 → 15/8 | note:C3 ]",
+  "[ 15/8 → 2/1 | note:D3 ]",
+  "[ 2/1 → 17/8 | note:Bb3 ]",
+  "[ 17/8 → 9/4 | note:C4 ]",
+  "[ 9/4 → 19/8 | note:G3 ]",
+  "[ 19/8 → 5/2 | note:A3 ]",
+  "[ 5/2 → 21/8 | note:E3 ]",
+  "[ 21/8 → 11/4 | note:F3 ]",
+  "[ 11/4 → 23/8 | note:C3 ]",
+  "[ 23/8 → 3/1 | note:D3 ]",
+  "[ 3/1 → 25/8 | note:Bb3 ]",
+  "[ 25/8 → 13/4 | note:C4 ]",
+  "[ 13/4 → 27/8 | note:G3 ]",
+  "[ 27/8 → 7/2 | note:A3 ]",
+  "[ 7/2 → 29/8 | note:E3 ]",
+  "[ 29/8 → 15/4 | note:F3 ]",
+  "[ 15/4 → 31/8 | note:C3 ]",
+  "[ 31/8 → 4/1 | note:D3 ]",
+]
+`;
+
+exports[`runs examples > example "bite" example index 1 1`] = `
+[
+  "[ 0/1 → 1/8 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 0/1 → 1/8 | s:hh bank:RolandTR909 speed:1.2 ]",
+  "[ 1/16 → 1/8 | s:sd n:6 bank:RolandTR909 speed:1.2 ]",
+  "[ 1/8 → 1/4 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 1/8 → 1/4 | s:hh bank:RolandTR909 speed:1.2 ]",
+  "[ 3/16 → 1/4 | s:sd n:6 bank:RolandTR909 speed:1.2 ]",
+  "[ 1/4 → 5/16 | s:hh bank:RolandTR909 speed:1.2 ]",
+  "[ 9/32 → 5/16 | s:sd n:5 bank:RolandTR909 speed:1.2 ]",
+  "[ 5/16 → 11/32 | s:sd n:1 bank:RolandTR909 speed:1.2 ]",
+  "[ 5/16 → 3/8 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 3/8 → 7/16 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 3/8 → 1/2 | s:cp n:7 bank:RolandTR909 speed:1.2 ]",
+  "[ 13/32 → 7/16 | s:sd n:2 bank:RolandTR909 speed:1.2 ]",
+  "[ 7/16 → 1/2 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 1/2 → 5/8 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 1/2 → 5/8 | s:hh bank:RolandTR909 speed:1.2 ]",
+  "[ 9/16 → 5/8 | s:sd n:6 bank:RolandTR909 speed:1.2 ]",
+  "[ 5/8 → 3/4 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 5/8 → 3/4 | s:hh bank:RolandTR909 speed:1.2 ]",
+  "[ 11/16 → 3/4 | s:sd n:6 bank:RolandTR909 speed:1.2 ]",
+  "[ 3/4 → 25/32 | s:sd n:1 bank:RolandTR909 speed:1.2 ]",
+  "[ 3/4 → 13/16 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 13/16 → 7/8 | s:hh bank:RolandTR909 speed:1.2 ]",
+  "[ 27/32 → 7/8 | s:sd n:5 bank:RolandTR909 speed:1.2 ]",
+  "[ 7/8 → 15/16 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 7/8 → 1/1 | s:cp n:7 bank:RolandTR909 speed:1.2 ]",
+  "[ 29/32 → 15/16 | s:sd n:2 bank:RolandTR909 speed:1.2 ]",
+  "[ 15/16 → 1/1 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 1/1 → 9/8 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 1/1 → 9/8 | s:hh bank:RolandTR909 speed:1.2 ]",
+  "[ 17/16 → 9/8 | s:sd n:6 bank:RolandTR909 speed:1.2 ]",
+  "[ 9/8 → 5/4 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 9/8 → 5/4 | s:hh bank:RolandTR909 speed:1.2 ]",
+  "[ 19/16 → 5/4 | s:sd n:6 bank:RolandTR909 speed:1.2 ]",
+  "[ 5/4 → 21/16 | s:hh bank:RolandTR909 speed:1.2 ]",
+  "[ 41/32 → 21/16 | s:sd n:5 bank:RolandTR909 speed:1.2 ]",
+  "[ 21/16 → 43/32 | s:sd n:1 bank:RolandTR909 speed:1.2 ]",
+  "[ 21/16 → 11/8 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 11/8 → 23/16 | s:sd n:1 bank:RolandTR909 speed:1.2 ]",
+  "[ 11/8 → 3/2 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 3/2 → 13/8 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 3/2 → 13/8 | s:hh bank:RolandTR909 speed:1.2 ]",
+  "[ 25/16 → 13/8 | s:sd n:6 bank:RolandTR909 speed:1.2 ]",
+  "[ 13/8 → 7/4 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 13/8 → 7/4 | s:hh bank:RolandTR909 speed:1.2 ]",
+  "[ 27/16 → 7/4 | s:sd n:6 bank:RolandTR909 speed:1.2 ]",
+  "[ 7/4 → 57/32 | s:sd n:1 bank:RolandTR909 speed:1.2 ]",
+  "[ 7/4 → 29/16 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 29/16 → 15/8 | s:hh bank:RolandTR909 speed:1.2 ]",
+  "[ 59/32 → 15/8 | s:sd n:5 bank:RolandTR909 speed:1.2 ]",
+  "[ 15/8 → 31/16 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 15/8 → 2/1 | s:cp n:7 bank:RolandTR909 speed:1.2 ]",
+  "[ 61/32 → 31/16 | s:sd n:2 bank:RolandTR909 speed:1.2 ]",
+  "[ 31/16 → 2/1 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 2/1 → 17/8 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 2/1 → 17/8 | s:hh bank:RolandTR909 speed:1.2 ]",
+  "[ 33/16 → 17/8 | s:sd n:6 bank:RolandTR909 speed:1.2 ]",
+  "[ 17/8 → 9/4 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 17/8 → 9/4 | s:hh bank:RolandTR909 speed:1.2 ]",
+  "[ 35/16 → 9/4 | s:sd n:6 bank:RolandTR909 speed:1.2 ]",
+  "[ 9/4 → 37/16 | s:hh bank:RolandTR909 speed:1.2 ]",
+  "[ 73/32 → 37/16 | s:sd n:5 bank:RolandTR909 speed:1.2 ]",
+  "[ 37/16 → 75/32 | s:sd n:1 bank:RolandTR909 speed:1.2 ]",
+  "[ 37/16 → 19/8 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 19/8 → 39/16 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 19/8 → 5/2 | s:cp n:7 bank:RolandTR909 speed:1.2 ]",
+  "[ 77/32 → 39/16 | s:sd n:2 bank:RolandTR909 speed:1.2 ]",
+  "[ 39/16 → 5/2 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 5/2 → 21/8 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 5/2 → 21/8 | s:hh bank:RolandTR909 speed:1.2 ]",
+  "[ 41/16 → 21/8 | s:sd n:6 bank:RolandTR909 speed:1.2 ]",
+  "[ 21/8 → 11/4 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 21/8 → 11/4 | s:hh bank:RolandTR909 speed:1.2 ]",
+  "[ 43/16 → 11/4 | s:sd n:6 bank:RolandTR909 speed:1.2 ]",
+  "[ 11/4 → 89/32 | s:sd n:1 bank:RolandTR909 speed:1.2 ]",
+  "[ 11/4 → 45/16 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 45/16 → 23/8 | s:hh bank:RolandTR909 speed:1.2 ]",
+  "[ 91/32 → 23/8 | s:sd n:5 bank:RolandTR909 speed:1.2 ]",
+  "[ 23/8 → 47/16 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 23/8 → 3/1 | s:cp n:7 bank:RolandTR909 speed:1.2 ]",
+  "[ 93/32 → 47/16 | s:sd n:2 bank:RolandTR909 speed:1.2 ]",
+  "[ 47/16 → 3/1 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 3/1 → 25/8 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 3/1 → 25/8 | s:hh bank:RolandTR909 speed:1.2 ]",
+  "[ 49/16 → 25/8 | s:sd n:6 bank:RolandTR909 speed:1.2 ]",
+  "[ 25/8 → 13/4 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 25/8 → 13/4 | s:hh bank:RolandTR909 speed:1.2 ]",
+  "[ 51/16 → 13/4 | s:sd n:6 bank:RolandTR909 speed:1.2 ]",
+  "[ 13/4 → 53/16 | s:hh bank:RolandTR909 speed:1.2 ]",
+  "[ 105/32 → 53/16 | s:sd n:5 bank:RolandTR909 speed:1.2 ]",
+  "[ 53/16 → 107/32 | s:sd n:1 bank:RolandTR909 speed:1.2 ]",
+  "[ 53/16 → 27/8 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 27/8 → 55/16 | s:sd n:1 bank:RolandTR909 speed:1.2 ]",
+  "[ 27/8 → 7/2 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 7/2 → 29/8 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 7/2 → 29/8 | s:hh bank:RolandTR909 speed:1.2 ]",
+  "[ 57/16 → 29/8 | s:sd n:6 bank:RolandTR909 speed:1.2 ]",
+  "[ 29/8 → 15/4 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 29/8 → 15/4 | s:hh bank:RolandTR909 speed:1.2 ]",
+  "[ 59/16 → 15/4 | s:sd n:6 bank:RolandTR909 speed:1.2 ]",
+  "[ 15/4 → 121/32 | s:sd n:1 bank:RolandTR909 speed:1.2 ]",
+  "[ 15/4 → 61/16 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 61/16 → 31/8 | s:hh bank:RolandTR909 speed:1.2 ]",
+  "[ 123/32 → 31/8 | s:sd n:5 bank:RolandTR909 speed:1.2 ]",
+  "[ 31/8 → 63/16 | s:bd bank:RolandTR909 speed:1.2 ]",
+  "[ 31/8 → 4/1 | s:cp n:7 bank:RolandTR909 speed:1.2 ]",
+  "[ 125/32 → 63/16 | s:sd n:2 bank:RolandTR909 speed:1.2 ]",
+  "[ 63/16 → 4/1 | s:bd bank:RolandTR909 speed:1.2 ]",
+]
+`;
+
 exports[`runs examples > example "bpattack" example index 0 1`] = `
 [
   "[ 0/1 → 1/4 | note:c2 s:sawtooth bandf:500 bpattack:0.5 bpenv:4 ]",
@@ -1229,6 +1379,16 @@ exports[`runs examples > example "brandBy" example index 0 1`] = `
 `;
 
 exports[`runs examples > example "cat" example index 0 1`] = `
+[
+  "[ 0/1 → 1/1 | note:e5 ]",
+  "[ 1/1 → 2/1 | note:b4 ]",
+  "[ 2/1 → 5/2 | note:d5 ]",
+  "[ 5/2 → 3/1 | note:c5 ]",
+  "[ 3/1 → 4/1 | note:e5 ]",
+]
+`;
+
+exports[`runs examples > example "cat" example index 1 1`] = `
 [
   "[ 0/1 → 1/4 | s:hh ]",
   "[ 1/4 → 1/2 | s:hh ]",
@@ -1251,16 +1411,6 @@ exports[`runs examples > example "cat" example index 0 1`] = `
 ]
 `;
 
-exports[`runs examples > example "cat" example index 0 2`] = `
-[
-  "[ 0/1 → 1/1 | note:e5 ]",
-  "[ 1/1 → 2/1 | note:b4 ]",
-  "[ 2/1 → 5/2 | note:d5 ]",
-  "[ 5/2 → 3/1 | note:c5 ]",
-  "[ 3/1 → 4/1 | note:e5 ]",
-]
-`;
-
 exports[`runs examples > example "ceil" example index 0 1`] = `
 [
   "[ 0/1 → 1/4 | note:42 ]",
@@ -2197,6 +2347,75 @@ exports[`runs examples > example "djf" example index 0 1`] = `
 
 exports[`runs examples > example "drawLine" example index 0 1`] = `[]`;
 
+exports[`runs examples > example "drive" example index 0 1`] = `
+[
+  "[ 0/1 → 1/16 | note:36 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:0.5 ]",
+  "[ 1/16 → 1/8 | note:38 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:0.5 ]",
+  "[ 1/8 → 3/16 | note:38 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:0.5 ]",
+  "[ 3/16 → 1/4 | note:31 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:0.5 ]",
+  "[ 1/4 → 5/16 | note:33 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:0.5 ]",
+  "[ 5/16 → 3/8 | note:40 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:0.5 ]",
+  "[ 3/8 → 7/16 | note:41 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:0.5 ]",
+  "[ 7/16 → 1/2 | note:36 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:0.5 ]",
+  "[ 1/2 → 9/16 | note:38 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:0.5 ]",
+  "[ 9/16 → 5/8 | note:38 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:0.5 ]",
+  "[ 5/8 → 11/16 | note:31 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:0.5 ]",
+  "[ 11/16 → 3/4 | note:33 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:0.5 ]",
+  "[ 3/4 → 13/16 | note:40 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:0.5 ]",
+  "[ 13/16 → 7/8 | note:41 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:0.5 ]",
+  "[ 7/8 → 15/16 | note:36 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:0.5 ]",
+  "[ 15/16 → 1/1 | note:38 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:0.5 ]",
+  "[ 1/1 → 17/16 | note:38 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:4 ]",
+  "[ 17/16 → 9/8 | note:31 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:4 ]",
+  "[ 9/8 → 19/16 | note:33 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:4 ]",
+  "[ 19/16 → 5/4 | note:40 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:4 ]",
+  "[ 5/4 → 21/16 | note:41 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:4 ]",
+  "[ 21/16 → 11/8 | note:36 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:4 ]",
+  "[ 11/8 → 23/16 | note:38 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:4 ]",
+  "[ 23/16 → 3/2 | note:38 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:4 ]",
+  "[ 3/2 → 25/16 | note:31 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:4 ]",
+  "[ 25/16 → 13/8 | note:33 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:4 ]",
+  "[ 13/8 → 27/16 | note:40 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:4 ]",
+  "[ 27/16 → 7/4 | note:41 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:4 ]",
+  "[ 7/4 → 29/16 | note:36 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:4 ]",
+  "[ 29/16 → 15/8 | note:38 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:4 ]",
+  "[ 15/8 → 31/16 | note:38 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:4 ]",
+  "[ 31/16 → 2/1 | note:31 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:4 ]",
+  "[ 2/1 → 33/16 | note:33 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:0.5 ]",
+  "[ 33/16 → 17/8 | note:40 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:0.5 ]",
+  "[ 17/8 → 35/16 | note:41 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:0.5 ]",
+  "[ 35/16 → 9/4 | note:36 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:0.5 ]",
+  "[ 9/4 → 37/16 | note:38 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:0.5 ]",
+  "[ 37/16 → 19/8 | note:38 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:0.5 ]",
+  "[ 19/8 → 39/16 | note:31 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:0.5 ]",
+  "[ 39/16 → 5/2 | note:33 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:0.5 ]",
+  "[ 5/2 → 41/16 | note:40 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:0.5 ]",
+  "[ 41/16 → 21/8 | note:41 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:0.5 ]",
+  "[ 21/8 → 43/16 | note:36 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:0.5 ]",
+  "[ 43/16 → 11/4 | note:38 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:0.5 ]",
+  "[ 11/4 → 45/16 | note:38 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:0.5 ]",
+  "[ 45/16 → 23/8 | note:31 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:0.5 ]",
+  "[ 23/8 → 47/16 | note:33 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:0.5 ]",
+  "[ 47/16 → 3/1 | note:40 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:0.5 ]",
+  "[ 3/1 → 49/16 | note:41 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:4 ]",
+  "[ 49/16 → 25/8 | note:36 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:4 ]",
+  "[ 25/8 → 51/16 | note:38 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:4 ]",
+  "[ 51/16 → 13/4 | note:38 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:4 ]",
+  "[ 13/4 → 53/16 | note:31 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:4 ]",
+  "[ 53/16 → 27/8 | note:33 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:4 ]",
+  "[ 27/8 → 55/16 | note:40 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:4 ]",
+  "[ 55/16 → 7/2 | note:41 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:4 ]",
+  "[ 7/2 → 57/16 | note:36 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:4 ]",
+  "[ 57/16 → 29/8 | note:38 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:4 ]",
+  "[ 29/8 → 59/16 | note:38 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:4 ]",
+  "[ 59/16 → 15/4 | note:31 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:4 ]",
+  "[ 15/4 → 61/16 | note:33 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:4 ]",
+  "[ 61/16 → 31/8 | note:40 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:4 ]",
+  "[ 31/8 → 63/16 | note:41 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:4 ]",
+  "[ 63/16 → 4/1 | note:36 s:supersaw lpenv:8 cutoff:150 resonance:0.8 ftype:ladder drive:4 ]",
+]
+`;
+
 exports[`runs examples > example "dry" example index 0 1`] = `
 [
   "[ 0/1 → 1/8 | n:0 s:superpiano room:0.7 dry:0 ]",
@@ -2493,6 +2712,43 @@ exports[`runs examples > example "every" example index 0 1`] = `
 ]
 `;
 
+exports[`runs examples > example "fanchor" example index 0 1`] = `
+[
+  "[ 0/1 → 1/8 | note:f s:sawtooth cutoff:1000 lpenv:8 fanchor:0 ]",
+  "[ 1/8 → 1/4 | note:g s:sawtooth cutoff:1000 lpenv:8 fanchor:0 ]",
+  "[ 1/4 → 3/8 | note:g s:sawtooth cutoff:1000 lpenv:8 fanchor:0 ]",
+  "[ 3/8 → 1/2 | note:c s:sawtooth cutoff:1000 lpenv:8 fanchor:0 ]",
+  "[ 1/2 → 5/8 | note:d s:sawtooth cutoff:1000 lpenv:8 fanchor:0 ]",
+  "[ 5/8 → 3/4 | note:a s:sawtooth cutoff:1000 lpenv:8 fanchor:0 ]",
+  "[ 3/4 → 7/8 | note:a# s:sawtooth cutoff:1000 lpenv:8 fanchor:0 ]",
+  "[ 7/8 → 1/1 | note:f s:sawtooth cutoff:1000 lpenv:8 fanchor:0 ]",
+  "[ 1/1 → 9/8 | note:g s:sawtooth cutoff:1000 lpenv:8 fanchor:0.5 ]",
+  "[ 9/8 → 5/4 | note:g s:sawtooth cutoff:1000 lpenv:8 fanchor:0.5 ]",
+  "[ 5/4 → 11/8 | note:c s:sawtooth cutoff:1000 lpenv:8 fanchor:0.5 ]",
+  "[ 11/8 → 3/2 | note:d s:sawtooth cutoff:1000 lpenv:8 fanchor:0.5 ]",
+  "[ 3/2 → 13/8 | note:a s:sawtooth cutoff:1000 lpenv:8 fanchor:0.5 ]",
+  "[ 13/8 → 7/4 | note:a# s:sawtooth cutoff:1000 lpenv:8 fanchor:0.5 ]",
+  "[ 7/4 → 15/8 | note:f s:sawtooth cutoff:1000 lpenv:8 fanchor:0.5 ]",
+  "[ 15/8 → 2/1 | note:g s:sawtooth cutoff:1000 lpenv:8 fanchor:0.5 ]",
+  "[ 2/1 → 17/8 | note:g s:sawtooth cutoff:1000 lpenv:8 fanchor:1 ]",
+  "[ 17/8 → 9/4 | note:c s:sawtooth cutoff:1000 lpenv:8 fanchor:1 ]",
+  "[ 9/4 → 19/8 | note:d s:sawtooth cutoff:1000 lpenv:8 fanchor:1 ]",
+  "[ 19/8 → 5/2 | note:a s:sawtooth cutoff:1000 lpenv:8 fanchor:1 ]",
+  "[ 5/2 → 21/8 | note:a# s:sawtooth cutoff:1000 lpenv:8 fanchor:1 ]",
+  "[ 21/8 → 11/4 | note:f s:sawtooth cutoff:1000 lpenv:8 fanchor:1 ]",
+  "[ 11/4 → 23/8 | note:g s:sawtooth cutoff:1000 lpenv:8 fanchor:1 ]",
+  "[ 23/8 → 3/1 | note:g s:sawtooth cutoff:1000 lpenv:8 fanchor:1 ]",
+  "[ 3/1 → 25/8 | note:c s:sawtooth cutoff:1000 lpenv:8 fanchor:0 ]",
+  "[ 25/8 → 13/4 | note:d s:sawtooth cutoff:1000 lpenv:8 fanchor:0 ]",
+  "[ 13/4 → 27/8 | note:a s:sawtooth cutoff:1000 lpenv:8 fanchor:0 ]",
+  "[ 27/8 → 7/2 | note:a# s:sawtooth cutoff:1000 lpenv:8 fanchor:0 ]",
+  "[ 7/2 → 29/8 | note:f s:sawtooth cutoff:1000 lpenv:8 fanchor:0 ]",
+  "[ 29/8 → 15/4 | note:g s:sawtooth cutoff:1000 lpenv:8 fanchor:0 ]",
+  "[ 15/4 → 31/8 | note:g s:sawtooth cutoff:1000 lpenv:8 fanchor:0 ]",
+  "[ 31/8 → 4/1 | note:c s:sawtooth cutoff:1000 lpenv:8 fanchor:0 ]",
+]
+`;
+
 exports[`runs examples > example "fast" example index 0 1`] = `
 [
   "[ 0/1 → 1/8 | s:bd ]",
@@ -2560,6 +2816,43 @@ exports[`runs examples > example "fastGap" example index 0 1`] = `
 ]
 `;
 
+exports[`runs examples > example "filter" example index 0 1`] = `
+[
+  "[ 0/1 → 1/8 | s:hh ]",
+  "[ 1/8 → 1/4 | s:hh ]",
+  "[ 1/4 → 3/8 | s:hh ]",
+  "[ 3/8 → 1/2 | s:hh ]",
+  "[ 1/2 → 5/8 | s:hh ]",
+  "[ 5/8 → 3/4 | s:hh ]",
+  "[ 3/4 → 7/8 | s:hh ]",
+  "[ 7/8 → 1/1 | s:oh ]",
+  "[ 1/1 → 9/8 | s:hh ]",
+  "[ 9/8 → 5/4 | s:hh ]",
+  "[ 5/4 → 11/8 | s:hh ]",
+  "[ 11/8 → 3/2 | s:hh ]",
+  "[ 3/2 → 13/8 | s:hh ]",
+  "[ 13/8 → 7/4 | s:hh ]",
+  "[ 7/4 → 15/8 | s:hh ]",
+  "[ 15/8 → 2/1 | s:oh ]",
+  "[ 2/1 → 17/8 | s:hh ]",
+  "[ 17/8 → 9/4 | s:hh ]",
+  "[ 9/4 → 19/8 | s:hh ]",
+  "[ 19/8 → 5/2 | s:hh ]",
+  "[ 5/2 → 21/8 | s:hh ]",
+  "[ 21/8 → 11/4 | s:hh ]",
+  "[ 11/4 → 23/8 | s:hh ]",
+  "[ 23/8 → 3/1 | s:oh ]",
+  "[ 3/1 → 25/8 | s:hh ]",
+  "[ 25/8 → 13/4 | s:hh ]",
+  "[ 13/4 → 27/8 | s:hh ]",
+  "[ 27/8 → 7/2 | s:hh ]",
+  "[ 7/2 → 29/8 | s:hh ]",
+  "[ 29/8 → 15/4 | s:hh ]",
+  "[ 15/4 → 31/8 | s:hh ]",
+  "[ 31/8 → 4/1 | s:oh ]",
+]
+`;
+
 exports[`runs examples > example "firstOf" example index 0 1`] = `
 [
   "[ 0/1 → 1/4 | note:g3 ]",
@@ -2611,175 +2904,175 @@ exports[`runs examples > example "floor" example index 0 1`] = `
 
 exports[`runs examples > example "fm" example index 0 1`] = `
 [
-  "[ 0/1 → 1/6 | note:c fmi:0 analyze:1 ]",
-  "[ 1/6 → 1/3 | note:e fmi:0 analyze:1 ]",
-  "[ 1/3 → 1/2 | note:g fmi:0 analyze:1 ]",
-  "[ 1/2 → 2/3 | note:b fmi:0 analyze:1 ]",
-  "[ 2/3 → 5/6 | note:g fmi:0 analyze:1 ]",
-  "[ 5/6 → 1/1 | note:e fmi:0 analyze:1 ]",
-  "[ 1/1 → 7/6 | note:c fmi:1 analyze:1 ]",
-  "[ 7/6 → 4/3 | note:e fmi:1 analyze:1 ]",
-  "[ 4/3 → 3/2 | note:g fmi:1 analyze:1 ]",
-  "[ 3/2 → 5/3 | note:b fmi:1 analyze:1 ]",
-  "[ 5/3 → 11/6 | note:g fmi:1 analyze:1 ]",
-  "[ 11/6 → 2/1 | note:e fmi:1 analyze:1 ]",
-  "[ 2/1 → 13/6 | note:c fmi:2 analyze:1 ]",
-  "[ 13/6 → 7/3 | note:e fmi:2 analyze:1 ]",
-  "[ 7/3 → 5/2 | note:g fmi:2 analyze:1 ]",
-  "[ 5/2 → 8/3 | note:b fmi:2 analyze:1 ]",
-  "[ 8/3 → 17/6 | note:g fmi:2 analyze:1 ]",
-  "[ 17/6 → 3/1 | note:e fmi:2 analyze:1 ]",
-  "[ 3/1 → 19/6 | note:c fmi:8 analyze:1 ]",
-  "[ 19/6 → 10/3 | note:e fmi:8 analyze:1 ]",
-  "[ 10/3 → 7/2 | note:g fmi:8 analyze:1 ]",
-  "[ 7/2 → 11/3 | note:b fmi:8 analyze:1 ]",
-  "[ 11/3 → 23/6 | note:g fmi:8 analyze:1 ]",
-  "[ 23/6 → 4/1 | note:e fmi:8 analyze:1 ]",
+  "[ 0/1 → 1/6 | note:c fmi:0 ]",
+  "[ 1/6 → 1/3 | note:e fmi:0 ]",
+  "[ 1/3 → 1/2 | note:g fmi:0 ]",
+  "[ 1/2 → 2/3 | note:b fmi:0 ]",
+  "[ 2/3 → 5/6 | note:g fmi:0 ]",
+  "[ 5/6 → 1/1 | note:e fmi:0 ]",
+  "[ 1/1 → 7/6 | note:c fmi:1 ]",
+  "[ 7/6 → 4/3 | note:e fmi:1 ]",
+  "[ 4/3 → 3/2 | note:g fmi:1 ]",
+  "[ 3/2 → 5/3 | note:b fmi:1 ]",
+  "[ 5/3 → 11/6 | note:g fmi:1 ]",
+  "[ 11/6 → 2/1 | note:e fmi:1 ]",
+  "[ 2/1 → 13/6 | note:c fmi:2 ]",
+  "[ 13/6 → 7/3 | note:e fmi:2 ]",
+  "[ 7/3 → 5/2 | note:g fmi:2 ]",
+  "[ 5/2 → 8/3 | note:b fmi:2 ]",
+  "[ 8/3 → 17/6 | note:g fmi:2 ]",
+  "[ 17/6 → 3/1 | note:e fmi:2 ]",
+  "[ 3/1 → 19/6 | note:c fmi:8 ]",
+  "[ 19/6 → 10/3 | note:e fmi:8 ]",
+  "[ 10/3 → 7/2 | note:g fmi:8 ]",
+  "[ 7/2 → 11/3 | note:b fmi:8 ]",
+  "[ 11/3 → 23/6 | note:g fmi:8 ]",
+  "[ 23/6 → 4/1 | note:e fmi:8 ]",
 ]
 `;
 
 exports[`runs examples > example "fmattack" example index 0 1`] = `
 [
-  "[ 0/1 → 1/6 | note:c fmi:4 fmattack:0 analyze:1 ]",
-  "[ 1/6 → 1/3 | note:e fmi:4 fmattack:0 analyze:1 ]",
-  "[ 1/3 → 1/2 | note:g fmi:4 fmattack:0 analyze:1 ]",
-  "[ 1/2 → 2/3 | note:b fmi:4 fmattack:0 analyze:1 ]",
-  "[ 2/3 → 5/6 | note:g fmi:4 fmattack:0 analyze:1 ]",
-  "[ 5/6 → 1/1 | note:e fmi:4 fmattack:0 analyze:1 ]",
-  "[ 1/1 → 7/6 | note:c fmi:4 fmattack:0.05 analyze:1 ]",
-  "[ 7/6 → 4/3 | note:e fmi:4 fmattack:0.05 analyze:1 ]",
-  "[ 4/3 → 3/2 | note:g fmi:4 fmattack:0.05 analyze:1 ]",
-  "[ 3/2 → 5/3 | note:b fmi:4 fmattack:0.05 analyze:1 ]",
-  "[ 5/3 → 11/6 | note:g fmi:4 fmattack:0.05 analyze:1 ]",
-  "[ 11/6 → 2/1 | note:e fmi:4 fmattack:0.05 analyze:1 ]",
-  "[ 2/1 → 13/6 | note:c fmi:4 fmattack:0.1 analyze:1 ]",
-  "[ 13/6 → 7/3 | note:e fmi:4 fmattack:0.1 analyze:1 ]",
-  "[ 7/3 → 5/2 | note:g fmi:4 fmattack:0.1 analyze:1 ]",
-  "[ 5/2 → 8/3 | note:b fmi:4 fmattack:0.1 analyze:1 ]",
-  "[ 8/3 → 17/6 | note:g fmi:4 fmattack:0.1 analyze:1 ]",
-  "[ 17/6 → 3/1 | note:e fmi:4 fmattack:0.1 analyze:1 ]",
-  "[ 3/1 → 19/6 | note:c fmi:4 fmattack:0.2 analyze:1 ]",
-  "[ 19/6 → 10/3 | note:e fmi:4 fmattack:0.2 analyze:1 ]",
-  "[ 10/3 → 7/2 | note:g fmi:4 fmattack:0.2 analyze:1 ]",
-  "[ 7/2 → 11/3 | note:b fmi:4 fmattack:0.2 analyze:1 ]",
-  "[ 11/3 → 23/6 | note:g fmi:4 fmattack:0.2 analyze:1 ]",
-  "[ 23/6 → 4/1 | note:e fmi:4 fmattack:0.2 analyze:1 ]",
+  "[ 0/1 → 1/6 | note:c fmi:4 fmattack:0 ]",
+  "[ 1/6 → 1/3 | note:e fmi:4 fmattack:0 ]",
+  "[ 1/3 → 1/2 | note:g fmi:4 fmattack:0 ]",
+  "[ 1/2 → 2/3 | note:b fmi:4 fmattack:0 ]",
+  "[ 2/3 → 5/6 | note:g fmi:4 fmattack:0 ]",
+  "[ 5/6 → 1/1 | note:e fmi:4 fmattack:0 ]",
+  "[ 1/1 → 7/6 | note:c fmi:4 fmattack:0.05 ]",
+  "[ 7/6 → 4/3 | note:e fmi:4 fmattack:0.05 ]",
+  "[ 4/3 → 3/2 | note:g fmi:4 fmattack:0.05 ]",
+  "[ 3/2 → 5/3 | note:b fmi:4 fmattack:0.05 ]",
+  "[ 5/3 → 11/6 | note:g fmi:4 fmattack:0.05 ]",
+  "[ 11/6 → 2/1 | note:e fmi:4 fmattack:0.05 ]",
+  "[ 2/1 → 13/6 | note:c fmi:4 fmattack:0.1 ]",
+  "[ 13/6 → 7/3 | note:e fmi:4 fmattack:0.1 ]",
+  "[ 7/3 → 5/2 | note:g fmi:4 fmattack:0.1 ]",
+  "[ 5/2 → 8/3 | note:b fmi:4 fmattack:0.1 ]",
+  "[ 8/3 → 17/6 | note:g fmi:4 fmattack:0.1 ]",
+  "[ 17/6 → 3/1 | note:e fmi:4 fmattack:0.1 ]",
+  "[ 3/1 → 19/6 | note:c fmi:4 fmattack:0.2 ]",
+  "[ 19/6 → 10/3 | note:e fmi:4 fmattack:0.2 ]",
+  "[ 10/3 → 7/2 | note:g fmi:4 fmattack:0.2 ]",
+  "[ 7/2 → 11/3 | note:b fmi:4 fmattack:0.2 ]",
+  "[ 11/3 → 23/6 | note:g fmi:4 fmattack:0.2 ]",
+  "[ 23/6 → 4/1 | note:e fmi:4 fmattack:0.2 ]",
 ]
 `;
 
 exports[`runs examples > example "fmdecay" example index 0 1`] = `
 [
-  "[ 0/1 → 1/6 | note:c fmi:4 fmdecay:0.01 fmsustain:0.4 analyze:1 ]",
-  "[ 1/6 → 1/3 | note:e fmi:4 fmdecay:0.01 fmsustain:0.4 analyze:1 ]",
-  "[ 1/3 → 1/2 | note:g fmi:4 fmdecay:0.01 fmsustain:0.4 analyze:1 ]",
-  "[ 1/2 → 2/3 | note:b fmi:4 fmdecay:0.01 fmsustain:0.4 analyze:1 ]",
-  "[ 2/3 → 5/6 | note:g fmi:4 fmdecay:0.01 fmsustain:0.4 analyze:1 ]",
-  "[ 5/6 → 1/1 | note:e fmi:4 fmdecay:0.01 fmsustain:0.4 analyze:1 ]",
-  "[ 1/1 → 7/6 | note:c fmi:4 fmdecay:0.05 fmsustain:0.4 analyze:1 ]",
-  "[ 7/6 → 4/3 | note:e fmi:4 fmdecay:0.05 fmsustain:0.4 analyze:1 ]",
-  "[ 4/3 → 3/2 | note:g fmi:4 fmdecay:0.05 fmsustain:0.4 analyze:1 ]",
-  "[ 3/2 → 5/3 | note:b fmi:4 fmdecay:0.05 fmsustain:0.4 analyze:1 ]",
-  "[ 5/3 → 11/6 | note:g fmi:4 fmdecay:0.05 fmsustain:0.4 analyze:1 ]",
-  "[ 11/6 → 2/1 | note:e fmi:4 fmdecay:0.05 fmsustain:0.4 analyze:1 ]",
-  "[ 2/1 → 13/6 | note:c fmi:4 fmdecay:0.1 fmsustain:0.4 analyze:1 ]",
-  "[ 13/6 → 7/3 | note:e fmi:4 fmdecay:0.1 fmsustain:0.4 analyze:1 ]",
-  "[ 7/3 → 5/2 | note:g fmi:4 fmdecay:0.1 fmsustain:0.4 analyze:1 ]",
-  "[ 5/2 → 8/3 | note:b fmi:4 fmdecay:0.1 fmsustain:0.4 analyze:1 ]",
-  "[ 8/3 → 17/6 | note:g fmi:4 fmdecay:0.1 fmsustain:0.4 analyze:1 ]",
-  "[ 17/6 → 3/1 | note:e fmi:4 fmdecay:0.1 fmsustain:0.4 analyze:1 ]",
-  "[ 3/1 → 19/6 | note:c fmi:4 fmdecay:0.2 fmsustain:0.4 analyze:1 ]",
-  "[ 19/6 → 10/3 | note:e fmi:4 fmdecay:0.2 fmsustain:0.4 analyze:1 ]",
-  "[ 10/3 → 7/2 | note:g fmi:4 fmdecay:0.2 fmsustain:0.4 analyze:1 ]",
-  "[ 7/2 → 11/3 | note:b fmi:4 fmdecay:0.2 fmsustain:0.4 analyze:1 ]",
-  "[ 11/3 → 23/6 | note:g fmi:4 fmdecay:0.2 fmsustain:0.4 analyze:1 ]",
-  "[ 23/6 → 4/1 | note:e fmi:4 fmdecay:0.2 fmsustain:0.4 analyze:1 ]",
+  "[ 0/1 → 1/6 | note:c fmi:4 fmdecay:0.01 fmsustain:0.4 ]",
+  "[ 1/6 → 1/3 | note:e fmi:4 fmdecay:0.01 fmsustain:0.4 ]",
+  "[ 1/3 → 1/2 | note:g fmi:4 fmdecay:0.01 fmsustain:0.4 ]",
+  "[ 1/2 → 2/3 | note:b fmi:4 fmdecay:0.01 fmsustain:0.4 ]",
+  "[ 2/3 → 5/6 | note:g fmi:4 fmdecay:0.01 fmsustain:0.4 ]",
+  "[ 5/6 → 1/1 | note:e fmi:4 fmdecay:0.01 fmsustain:0.4 ]",
+  "[ 1/1 → 7/6 | note:c fmi:4 fmdecay:0.05 fmsustain:0.4 ]",
+  "[ 7/6 → 4/3 | note:e fmi:4 fmdecay:0.05 fmsustain:0.4 ]",
+  "[ 4/3 → 3/2 | note:g fmi:4 fmdecay:0.05 fmsustain:0.4 ]",
+  "[ 3/2 → 5/3 | note:b fmi:4 fmdecay:0.05 fmsustain:0.4 ]",
+  "[ 5/3 → 11/6 | note:g fmi:4 fmdecay:0.05 fmsustain:0.4 ]",
+  "[ 11/6 → 2/1 | note:e fmi:4 fmdecay:0.05 fmsustain:0.4 ]",
+  "[ 2/1 → 13/6 | note:c fmi:4 fmdecay:0.1 fmsustain:0.4 ]",
+  "[ 13/6 → 7/3 | note:e fmi:4 fmdecay:0.1 fmsustain:0.4 ]",
+  "[ 7/3 → 5/2 | note:g fmi:4 fmdecay:0.1 fmsustain:0.4 ]",
+  "[ 5/2 → 8/3 | note:b fmi:4 fmdecay:0.1 fmsustain:0.4 ]",
+  "[ 8/3 → 17/6 | note:g fmi:4 fmdecay:0.1 fmsustain:0.4 ]",
+  "[ 17/6 → 3/1 | note:e fmi:4 fmdecay:0.1 fmsustain:0.4 ]",
+  "[ 3/1 → 19/6 | note:c fmi:4 fmdecay:0.2 fmsustain:0.4 ]",
+  "[ 19/6 → 10/3 | note:e fmi:4 fmdecay:0.2 fmsustain:0.4 ]",
+  "[ 10/3 → 7/2 | note:g fmi:4 fmdecay:0.2 fmsustain:0.4 ]",
+  "[ 7/2 → 11/3 | note:b fmi:4 fmdecay:0.2 fmsustain:0.4 ]",
+  "[ 11/3 → 23/6 | note:g fmi:4 fmdecay:0.2 fmsustain:0.4 ]",
+  "[ 23/6 → 4/1 | note:e fmi:4 fmdecay:0.2 fmsustain:0.4 ]",
 ]
 `;
 
 exports[`runs examples > example "fmenv" example index 0 1`] = `
 [
-  "[ 0/1 → 1/6 | note:c fmi:4 fmdecay:0.2 fmsustain:0 fmenv:exp analyze:1 ]",
-  "[ 1/6 → 1/3 | note:e fmi:4 fmdecay:0.2 fmsustain:0 fmenv:exp analyze:1 ]",
-  "[ 1/3 → 1/2 | note:g fmi:4 fmdecay:0.2 fmsustain:0 fmenv:exp analyze:1 ]",
-  "[ 1/2 → 2/3 | note:b fmi:4 fmdecay:0.2 fmsustain:0 fmenv:exp analyze:1 ]",
-  "[ 2/3 → 5/6 | note:g fmi:4 fmdecay:0.2 fmsustain:0 fmenv:exp analyze:1 ]",
-  "[ 5/6 → 1/1 | note:e fmi:4 fmdecay:0.2 fmsustain:0 fmenv:exp analyze:1 ]",
-  "[ 1/1 → 7/6 | note:c fmi:4 fmdecay:0.2 fmsustain:0 fmenv:lin analyze:1 ]",
-  "[ 7/6 → 4/3 | note:e fmi:4 fmdecay:0.2 fmsustain:0 fmenv:lin analyze:1 ]",
-  "[ 4/3 → 3/2 | note:g fmi:4 fmdecay:0.2 fmsustain:0 fmenv:lin analyze:1 ]",
-  "[ 3/2 → 5/3 | note:b fmi:4 fmdecay:0.2 fmsustain:0 fmenv:lin analyze:1 ]",
-  "[ 5/3 → 11/6 | note:g fmi:4 fmdecay:0.2 fmsustain:0 fmenv:lin analyze:1 ]",
-  "[ 11/6 → 2/1 | note:e fmi:4 fmdecay:0.2 fmsustain:0 fmenv:lin analyze:1 ]",
-  "[ 2/1 → 13/6 | note:c fmi:4 fmdecay:0.2 fmsustain:0 fmenv:exp analyze:1 ]",
-  "[ 13/6 → 7/3 | note:e fmi:4 fmdecay:0.2 fmsustain:0 fmenv:exp analyze:1 ]",
-  "[ 7/3 → 5/2 | note:g fmi:4 fmdecay:0.2 fmsustain:0 fmenv:exp analyze:1 ]",
-  "[ 5/2 → 8/3 | note:b fmi:4 fmdecay:0.2 fmsustain:0 fmenv:exp analyze:1 ]",
-  "[ 8/3 → 17/6 | note:g fmi:4 fmdecay:0.2 fmsustain:0 fmenv:exp analyze:1 ]",
-  "[ 17/6 → 3/1 | note:e fmi:4 fmdecay:0.2 fmsustain:0 fmenv:exp analyze:1 ]",
-  "[ 3/1 → 19/6 | note:c fmi:4 fmdecay:0.2 fmsustain:0 fmenv:lin analyze:1 ]",
-  "[ 19/6 → 10/3 | note:e fmi:4 fmdecay:0.2 fmsustain:0 fmenv:lin analyze:1 ]",
-  "[ 10/3 → 7/2 | note:g fmi:4 fmdecay:0.2 fmsustain:0 fmenv:lin analyze:1 ]",
-  "[ 7/2 → 11/3 | note:b fmi:4 fmdecay:0.2 fmsustain:0 fmenv:lin analyze:1 ]",
-  "[ 11/3 → 23/6 | note:g fmi:4 fmdecay:0.2 fmsustain:0 fmenv:lin analyze:1 ]",
-  "[ 23/6 → 4/1 | note:e fmi:4 fmdecay:0.2 fmsustain:0 fmenv:lin analyze:1 ]",
+  "[ 0/1 → 1/6 | note:c fmi:4 fmdecay:0.2 fmsustain:0 fmenv:exp ]",
+  "[ 1/6 → 1/3 | note:e fmi:4 fmdecay:0.2 fmsustain:0 fmenv:exp ]",
+  "[ 1/3 → 1/2 | note:g fmi:4 fmdecay:0.2 fmsustain:0 fmenv:exp ]",
+  "[ 1/2 → 2/3 | note:b fmi:4 fmdecay:0.2 fmsustain:0 fmenv:exp ]",
+  "[ 2/3 → 5/6 | note:g fmi:4 fmdecay:0.2 fmsustain:0 fmenv:exp ]",
+  "[ 5/6 → 1/1 | note:e fmi:4 fmdecay:0.2 fmsustain:0 fmenv:exp ]",
+  "[ 1/1 → 7/6 | note:c fmi:4 fmdecay:0.2 fmsustain:0 fmenv:lin ]",
+  "[ 7/6 → 4/3 | note:e fmi:4 fmdecay:0.2 fmsustain:0 fmenv:lin ]",
+  "[ 4/3 → 3/2 | note:g fmi:4 fmdecay:0.2 fmsustain:0 fmenv:lin ]",
+  "[ 3/2 → 5/3 | note:b fmi:4 fmdecay:0.2 fmsustain:0 fmenv:lin ]",
+  "[ 5/3 → 11/6 | note:g fmi:4 fmdecay:0.2 fmsustain:0 fmenv:lin ]",
+  "[ 11/6 → 2/1 | note:e fmi:4 fmdecay:0.2 fmsustain:0 fmenv:lin ]",
+  "[ 2/1 → 13/6 | note:c fmi:4 fmdecay:0.2 fmsustain:0 fmenv:exp ]",
+  "[ 13/6 → 7/3 | note:e fmi:4 fmdecay:0.2 fmsustain:0 fmenv:exp ]",
+  "[ 7/3 → 5/2 | note:g fmi:4 fmdecay:0.2 fmsustain:0 fmenv:exp ]",
+  "[ 5/2 → 8/3 | note:b fmi:4 fmdecay:0.2 fmsustain:0 fmenv:exp ]",
+  "[ 8/3 → 17/6 | note:g fmi:4 fmdecay:0.2 fmsustain:0 fmenv:exp ]",
+  "[ 17/6 → 3/1 | note:e fmi:4 fmdecay:0.2 fmsustain:0 fmenv:exp ]",
+  "[ 3/1 → 19/6 | note:c fmi:4 fmdecay:0.2 fmsustain:0 fmenv:lin ]",
+  "[ 19/6 → 10/3 | note:e fmi:4 fmdecay:0.2 fmsustain:0 fmenv:lin ]",
+  "[ 10/3 → 7/2 | note:g fmi:4 fmdecay:0.2 fmsustain:0 fmenv:lin ]",
+  "[ 7/2 → 11/3 | note:b fmi:4 fmdecay:0.2 fmsustain:0 fmenv:lin ]",
+  "[ 11/3 → 23/6 | note:g fmi:4 fmdecay:0.2 fmsustain:0 fmenv:lin ]",
+  "[ 23/6 → 4/1 | note:e fmi:4 fmdecay:0.2 fmsustain:0 fmenv:lin ]",
 ]
 `;
 
 exports[`runs examples > example "fmh" example index 0 1`] = `
 [
-  "[ 0/1 → 1/6 | note:c fmi:4 fmh:1 analyze:1 ]",
-  "[ 1/6 → 1/3 | note:e fmi:4 fmh:1 analyze:1 ]",
-  "[ 1/3 → 1/2 | note:g fmi:4 fmh:1 analyze:1 ]",
-  "[ 1/2 → 2/3 | note:b fmi:4 fmh:1 analyze:1 ]",
-  "[ 2/3 → 5/6 | note:g fmi:4 fmh:1 analyze:1 ]",
-  "[ 5/6 → 1/1 | note:e fmi:4 fmh:1 analyze:1 ]",
-  "[ 1/1 → 7/6 | note:c fmi:4 fmh:2 analyze:1 ]",
-  "[ 7/6 → 4/3 | note:e fmi:4 fmh:2 analyze:1 ]",
-  "[ 4/3 → 3/2 | note:g fmi:4 fmh:2 analyze:1 ]",
-  "[ 3/2 → 5/3 | note:b fmi:4 fmh:2 analyze:1 ]",
-  "[ 5/3 → 11/6 | note:g fmi:4 fmh:2 analyze:1 ]",
-  "[ 11/6 → 2/1 | note:e fmi:4 fmh:2 analyze:1 ]",
-  "[ 2/1 → 13/6 | note:c fmi:4 fmh:1.5 analyze:1 ]",
-  "[ 13/6 → 7/3 | note:e fmi:4 fmh:1.5 analyze:1 ]",
-  "[ 7/3 → 5/2 | note:g fmi:4 fmh:1.5 analyze:1 ]",
-  "[ 5/2 → 8/3 | note:b fmi:4 fmh:1.5 analyze:1 ]",
-  "[ 8/3 → 17/6 | note:g fmi:4 fmh:1.5 analyze:1 ]",
-  "[ 17/6 → 3/1 | note:e fmi:4 fmh:1.5 analyze:1 ]",
-  "[ 3/1 → 19/6 | note:c fmi:4 fmh:1.61 analyze:1 ]",
-  "[ 19/6 → 10/3 | note:e fmi:4 fmh:1.61 analyze:1 ]",
-  "[ 10/3 → 7/2 | note:g fmi:4 fmh:1.61 analyze:1 ]",
-  "[ 7/2 → 11/3 | note:b fmi:4 fmh:1.61 analyze:1 ]",
-  "[ 11/3 → 23/6 | note:g fmi:4 fmh:1.61 analyze:1 ]",
-  "[ 23/6 → 4/1 | note:e fmi:4 fmh:1.61 analyze:1 ]",
+  "[ 0/1 → 1/6 | note:c fmi:4 fmh:1 ]",
+  "[ 1/6 → 1/3 | note:e fmi:4 fmh:1 ]",
+  "[ 1/3 → 1/2 | note:g fmi:4 fmh:1 ]",
+  "[ 1/2 → 2/3 | note:b fmi:4 fmh:1 ]",
+  "[ 2/3 → 5/6 | note:g fmi:4 fmh:1 ]",
+  "[ 5/6 → 1/1 | note:e fmi:4 fmh:1 ]",
+  "[ 1/1 → 7/6 | note:c fmi:4 fmh:2 ]",
+  "[ 7/6 → 4/3 | note:e fmi:4 fmh:2 ]",
+  "[ 4/3 → 3/2 | note:g fmi:4 fmh:2 ]",
+  "[ 3/2 → 5/3 | note:b fmi:4 fmh:2 ]",
+  "[ 5/3 → 11/6 | note:g fmi:4 fmh:2 ]",
+  "[ 11/6 → 2/1 | note:e fmi:4 fmh:2 ]",
+  "[ 2/1 → 13/6 | note:c fmi:4 fmh:1.5 ]",
+  "[ 13/6 → 7/3 | note:e fmi:4 fmh:1.5 ]",
+  "[ 7/3 → 5/2 | note:g fmi:4 fmh:1.5 ]",
+  "[ 5/2 → 8/3 | note:b fmi:4 fmh:1.5 ]",
+  "[ 8/3 → 17/6 | note:g fmi:4 fmh:1.5 ]",
+  "[ 17/6 → 3/1 | note:e fmi:4 fmh:1.5 ]",
+  "[ 3/1 → 19/6 | note:c fmi:4 fmh:1.61 ]",
+  "[ 19/6 → 10/3 | note:e fmi:4 fmh:1.61 ]",
+  "[ 10/3 → 7/2 | note:g fmi:4 fmh:1.61 ]",
+  "[ 7/2 → 11/3 | note:b fmi:4 fmh:1.61 ]",
+  "[ 11/3 → 23/6 | note:g fmi:4 fmh:1.61 ]",
+  "[ 23/6 → 4/1 | note:e fmi:4 fmh:1.61 ]",
 ]
 `;
 
 exports[`runs examples > example "fmsustain" example index 0 1`] = `
 [
-  "[ 0/1 → 1/6 | note:c fmi:4 fmdecay:0.1 fmsustain:1 analyze:1 ]",
-  "[ 1/6 → 1/3 | note:e fmi:4 fmdecay:0.1 fmsustain:1 analyze:1 ]",
-  "[ 1/3 → 1/2 | note:g fmi:4 fmdecay:0.1 fmsustain:1 analyze:1 ]",
-  "[ 1/2 → 2/3 | note:b fmi:4 fmdecay:0.1 fmsustain:1 analyze:1 ]",
-  "[ 2/3 → 5/6 | note:g fmi:4 fmdecay:0.1 fmsustain:1 analyze:1 ]",
-  "[ 5/6 → 1/1 | note:e fmi:4 fmdecay:0.1 fmsustain:1 analyze:1 ]",
-  "[ 1/1 → 7/6 | note:c fmi:4 fmdecay:0.1 fmsustain:0.75 analyze:1 ]",
-  "[ 7/6 → 4/3 | note:e fmi:4 fmdecay:0.1 fmsustain:0.75 analyze:1 ]",
-  "[ 4/3 → 3/2 | note:g fmi:4 fmdecay:0.1 fmsustain:0.75 analyze:1 ]",
-  "[ 3/2 → 5/3 | note:b fmi:4 fmdecay:0.1 fmsustain:0.75 analyze:1 ]",
-  "[ 5/3 → 11/6 | note:g fmi:4 fmdecay:0.1 fmsustain:0.75 analyze:1 ]",
-  "[ 11/6 → 2/1 | note:e fmi:4 fmdecay:0.1 fmsustain:0.75 analyze:1 ]",
-  "[ 2/1 → 13/6 | note:c fmi:4 fmdecay:0.1 fmsustain:0.5 analyze:1 ]",
-  "[ 13/6 → 7/3 | note:e fmi:4 fmdecay:0.1 fmsustain:0.5 analyze:1 ]",
-  "[ 7/3 → 5/2 | note:g fmi:4 fmdecay:0.1 fmsustain:0.5 analyze:1 ]",
-  "[ 5/2 → 8/3 | note:b fmi:4 fmdecay:0.1 fmsustain:0.5 analyze:1 ]",
-  "[ 8/3 → 17/6 | note:g fmi:4 fmdecay:0.1 fmsustain:0.5 analyze:1 ]",
-  "[ 17/6 → 3/1 | note:e fmi:4 fmdecay:0.1 fmsustain:0.5 analyze:1 ]",
-  "[ 3/1 → 19/6 | note:c fmi:4 fmdecay:0.1 fmsustain:0 analyze:1 ]",
-  "[ 19/6 → 10/3 | note:e fmi:4 fmdecay:0.1 fmsustain:0 analyze:1 ]",
-  "[ 10/3 → 7/2 | note:g fmi:4 fmdecay:0.1 fmsustain:0 analyze:1 ]",
-  "[ 7/2 → 11/3 | note:b fmi:4 fmdecay:0.1 fmsustain:0 analyze:1 ]",
-  "[ 11/3 → 23/6 | note:g fmi:4 fmdecay:0.1 fmsustain:0 analyze:1 ]",
-  "[ 23/6 → 4/1 | note:e fmi:4 fmdecay:0.1 fmsustain:0 analyze:1 ]",
+  "[ 0/1 → 1/6 | note:c fmi:4 fmdecay:0.1 fmsustain:1 ]",
+  "[ 1/6 → 1/3 | note:e fmi:4 fmdecay:0.1 fmsustain:1 ]",
+  "[ 1/3 → 1/2 | note:g fmi:4 fmdecay:0.1 fmsustain:1 ]",
+  "[ 1/2 → 2/3 | note:b fmi:4 fmdecay:0.1 fmsustain:1 ]",
+  "[ 2/3 → 5/6 | note:g fmi:4 fmdecay:0.1 fmsustain:1 ]",
+  "[ 5/6 → 1/1 | note:e fmi:4 fmdecay:0.1 fmsustain:1 ]",
+  "[ 1/1 → 7/6 | note:c fmi:4 fmdecay:0.1 fmsustain:0.75 ]",
+  "[ 7/6 → 4/3 | note:e fmi:4 fmdecay:0.1 fmsustain:0.75 ]",
+  "[ 4/3 → 3/2 | note:g fmi:4 fmdecay:0.1 fmsustain:0.75 ]",
+  "[ 3/2 → 5/3 | note:b fmi:4 fmdecay:0.1 fmsustain:0.75 ]",
+  "[ 5/3 → 11/6 | note:g fmi:4 fmdecay:0.1 fmsustain:0.75 ]",
+  "[ 11/6 → 2/1 | note:e fmi:4 fmdecay:0.1 fmsustain:0.75 ]",
+  "[ 2/1 → 13/6 | note:c fmi:4 fmdecay:0.1 fmsustain:0.5 ]",
+  "[ 13/6 → 7/3 | note:e fmi:4 fmdecay:0.1 fmsustain:0.5 ]",
+  "[ 7/3 → 5/2 | note:g fmi:4 fmdecay:0.1 fmsustain:0.5 ]",
+  "[ 5/2 → 8/3 | note:b fmi:4 fmdecay:0.1 fmsustain:0.5 ]",
+  "[ 8/3 → 17/6 | note:g fmi:4 fmdecay:0.1 fmsustain:0.5 ]",
+  "[ 17/6 → 3/1 | note:e fmi:4 fmdecay:0.1 fmsustain:0.5 ]",
+  "[ 3/1 → 19/6 | note:c fmi:4 fmdecay:0.1 fmsustain:0 ]",
+  "[ 19/6 → 10/3 | note:e fmi:4 fmdecay:0.1 fmsustain:0 ]",
+  "[ 10/3 → 7/2 | note:g fmi:4 fmdecay:0.1 fmsustain:0 ]",
+  "[ 7/2 → 11/3 | note:b fmi:4 fmdecay:0.1 fmsustain:0 ]",
+  "[ 11/3 → 23/6 | note:g fmi:4 fmdecay:0.1 fmsustain:0 ]",
+  "[ 23/6 → 4/1 | note:e fmi:4 fmdecay:0.1 fmsustain:0 ]",
 ]
 `;
 
@@ -2877,22 +3170,99 @@ exports[`runs examples > example "fscope" example index 0 1`] = `
 
 exports[`runs examples > example "ftype" example index 0 1`] = `
 [
-  "[ 0/1 → 1/4 | note:c2 s:sawtooth cutoff:500 bpenv:4 ftype:12db ]",
-  "[ 1/4 → 1/2 | note:e2 s:sawtooth cutoff:500 bpenv:4 ftype:12db ]",
-  "[ 1/2 → 3/4 | note:f2 s:sawtooth cutoff:500 bpenv:4 ftype:24db ]",
-  "[ 3/4 → 1/1 | note:g2 s:sawtooth cutoff:500 bpenv:4 ftype:24db ]",
-  "[ 1/1 → 5/4 | note:c2 s:sawtooth cutoff:500 bpenv:4 ftype:12db ]",
-  "[ 5/4 → 3/2 | note:e2 s:sawtooth cutoff:500 bpenv:4 ftype:12db ]",
-  "[ 3/2 → 7/4 | note:f2 s:sawtooth cutoff:500 bpenv:4 ftype:24db ]",
-  "[ 7/4 → 2/1 | note:g2 s:sawtooth cutoff:500 bpenv:4 ftype:24db ]",
-  "[ 2/1 → 9/4 | note:c2 s:sawtooth cutoff:500 bpenv:4 ftype:12db ]",
-  "[ 9/4 → 5/2 | note:e2 s:sawtooth cutoff:500 bpenv:4 ftype:12db ]",
-  "[ 5/2 → 11/4 | note:f2 s:sawtooth cutoff:500 bpenv:4 ftype:24db ]",
-  "[ 11/4 → 3/1 | note:g2 s:sawtooth cutoff:500 bpenv:4 ftype:24db ]",
-  "[ 3/1 → 13/4 | note:c2 s:sawtooth cutoff:500 bpenv:4 ftype:12db ]",
-  "[ 13/4 → 7/2 | note:e2 s:sawtooth cutoff:500 bpenv:4 ftype:12db ]",
-  "[ 7/2 → 15/4 | note:f2 s:sawtooth cutoff:500 bpenv:4 ftype:24db ]",
-  "[ 15/4 → 4/1 | note:g2 s:sawtooth cutoff:500 bpenv:4 ftype:24db ]",
+  "[ 0/1 → 1/8 | note:f s:sawtooth lpenv:4 cutoff:500 ftype:0 resonance:1 ]",
+  "[ 1/8 → 1/4 | note:g s:sawtooth lpenv:4 cutoff:500 ftype:0 resonance:1 ]",
+  "[ 1/4 → 3/8 | note:g s:sawtooth lpenv:4 cutoff:500 ftype:0 resonance:1 ]",
+  "[ 3/8 → 1/2 | note:c s:sawtooth lpenv:4 cutoff:500 ftype:0 resonance:1 ]",
+  "[ 1/2 → 5/8 | note:d s:sawtooth lpenv:4 cutoff:500 ftype:0 resonance:1 ]",
+  "[ 5/8 → 3/4 | note:a s:sawtooth lpenv:4 cutoff:500 ftype:0 resonance:1 ]",
+  "[ 3/4 → 7/8 | note:a# s:sawtooth lpenv:4 cutoff:500 ftype:0 resonance:1 ]",
+  "[ 7/8 → 1/1 | note:f s:sawtooth lpenv:4 cutoff:500 ftype:0 resonance:1 ]",
+  "[ 1/1 → 9/8 | note:g s:sawtooth lpenv:4 cutoff:500 ftype:1 resonance:1 ]",
+  "[ 9/8 → 5/4 | note:g s:sawtooth lpenv:4 cutoff:500 ftype:1 resonance:1 ]",
+  "[ 5/4 → 11/8 | note:c s:sawtooth lpenv:4 cutoff:500 ftype:1 resonance:1 ]",
+  "[ 11/8 → 3/2 | note:d s:sawtooth lpenv:4 cutoff:500 ftype:1 resonance:1 ]",
+  "[ 3/2 → 13/8 | note:a s:sawtooth lpenv:4 cutoff:500 ftype:1 resonance:1 ]",
+  "[ 13/8 → 7/4 | note:a# s:sawtooth lpenv:4 cutoff:500 ftype:1 resonance:1 ]",
+  "[ 7/4 → 15/8 | note:f s:sawtooth lpenv:4 cutoff:500 ftype:1 resonance:1 ]",
+  "[ 15/8 → 2/1 | note:g s:sawtooth lpenv:4 cutoff:500 ftype:1 resonance:1 ]",
+  "[ 2/1 → 17/8 | note:g s:sawtooth lpenv:4 cutoff:500 ftype:2 resonance:1 ]",
+  "[ 17/8 → 9/4 | note:c s:sawtooth lpenv:4 cutoff:500 ftype:2 resonance:1 ]",
+  "[ 9/4 → 19/8 | note:d s:sawtooth lpenv:4 cutoff:500 ftype:2 resonance:1 ]",
+  "[ 19/8 → 5/2 | note:a s:sawtooth lpenv:4 cutoff:500 ftype:2 resonance:1 ]",
+  "[ 5/2 → 21/8 | note:a# s:sawtooth lpenv:4 cutoff:500 ftype:2 resonance:1 ]",
+  "[ 21/8 → 11/4 | note:f s:sawtooth lpenv:4 cutoff:500 ftype:2 resonance:1 ]",
+  "[ 11/4 → 23/8 | note:g s:sawtooth lpenv:4 cutoff:500 ftype:2 resonance:1 ]",
+  "[ 23/8 → 3/1 | note:g s:sawtooth lpenv:4 cutoff:500 ftype:2 resonance:1 ]",
+  "[ 3/1 → 25/8 | note:c s:sawtooth lpenv:4 cutoff:500 ftype:0 resonance:1 ]",
+  "[ 25/8 → 13/4 | note:d s:sawtooth lpenv:4 cutoff:500 ftype:0 resonance:1 ]",
+  "[ 13/4 → 27/8 | note:a s:sawtooth lpenv:4 cutoff:500 ftype:0 resonance:1 ]",
+  "[ 27/8 → 7/2 | note:a# s:sawtooth lpenv:4 cutoff:500 ftype:0 resonance:1 ]",
+  "[ 7/2 → 29/8 | note:f s:sawtooth lpenv:4 cutoff:500 ftype:0 resonance:1 ]",
+  "[ 29/8 → 15/4 | note:g s:sawtooth lpenv:4 cutoff:500 ftype:0 resonance:1 ]",
+  "[ 15/4 → 31/8 | note:g s:sawtooth lpenv:4 cutoff:500 ftype:0 resonance:1 ]",
+  "[ 31/8 → 4/1 | note:c s:sawtooth lpenv:4 cutoff:500 ftype:0 resonance:1 ]",
+]
+`;
+
+exports[`runs examples > example "ftype" example index 1 1`] = `
+[
+  "[ 0/1 → 1/14 | note:c s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:ladder ]",
+  "[ 1/14 → 1/7 | note:f s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:ladder ]",
+  "[ 1/7 → 3/14 | note:g s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:ladder ]",
+  "[ 3/14 → 2/7 | note:g s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:ladder ]",
+  "[ 2/7 → 5/14 | note:a s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:ladder ]",
+  "[ 5/14 → 3/7 | note:c s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:ladder ]",
+  "[ 3/7 → 1/2 | note:d4 s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:ladder ]",
+  "[ 1/2 → 4/7 | note:c s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:ladder ]",
+  "[ 4/7 → 9/14 | note:f s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:ladder ]",
+  "[ 9/14 → 5/7 | note:g s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:ladder ]",
+  "[ 5/7 → 11/14 | note:g s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:ladder ]",
+  "[ 11/14 → 6/7 | note:a s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:ladder ]",
+  "[ 6/7 → 13/14 | note:c s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:ladder ]",
+  "[ 13/14 → 1/1 | note:d4 s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:ladder ]",
+  "[ 1/1 → 15/14 | note:c s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:12db ]",
+  "[ 15/14 → 8/7 | note:f s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:12db ]",
+  "[ 8/7 → 17/14 | note:g s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:12db ]",
+  "[ 17/14 → 9/7 | note:g s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:12db ]",
+  "[ 9/7 → 19/14 | note:a s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:12db ]",
+  "[ 19/14 → 10/7 | note:c s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:12db ]",
+  "[ 10/7 → 3/2 | note:d4 s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:12db ]",
+  "[ 3/2 → 11/7 | note:c s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:12db ]",
+  "[ 11/7 → 23/14 | note:f s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:12db ]",
+  "[ 23/14 → 12/7 | note:g s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:12db ]",
+  "[ 12/7 → 25/14 | note:g s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:12db ]",
+  "[ 25/14 → 13/7 | note:a s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:12db ]",
+  "[ 13/7 → 27/14 | note:c s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:12db ]",
+  "[ 27/14 → 2/1 | note:d4 s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:12db ]",
+  "[ 2/1 → 29/14 | note:c s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:24db ]",
+  "[ 29/14 → 15/7 | note:f s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:24db ]",
+  "[ 15/7 → 31/14 | note:g s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:24db ]",
+  "[ 31/14 → 16/7 | note:g s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:24db ]",
+  "[ 16/7 → 33/14 | note:a s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:24db ]",
+  "[ 33/14 → 17/7 | note:c s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:24db ]",
+  "[ 17/7 → 5/2 | note:d4 s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:24db ]",
+  "[ 5/2 → 18/7 | note:c s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:24db ]",
+  "[ 18/7 → 37/14 | note:f s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:24db ]",
+  "[ 37/14 → 19/7 | note:g s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:24db ]",
+  "[ 19/7 → 39/14 | note:g s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:24db ]",
+  "[ 39/14 → 20/7 | note:a s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:24db ]",
+  "[ 20/7 → 41/14 | note:c s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:24db ]",
+  "[ 41/14 → 3/1 | note:d4 s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:24db ]",
+  "[ 3/1 → 43/14 | note:c s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:ladder ]",
+  "[ 43/14 → 22/7 | note:f s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:ladder ]",
+  "[ 22/7 → 45/14 | note:g s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:ladder ]",
+  "[ 45/14 → 23/7 | note:g s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:ladder ]",
+  "[ 23/7 → 47/14 | note:a s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:ladder ]",
+  "[ 47/14 → 24/7 | note:c s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:ladder ]",
+  "[ 24/7 → 7/2 | note:d4 s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:ladder ]",
+  "[ 7/2 → 25/7 | note:c s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:ladder ]",
+  "[ 25/7 → 51/14 | note:f s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:ladder ]",
+  "[ 51/14 → 26/7 | note:g s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:ladder ]",
+  "[ 26/7 → 53/14 | note:g s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:ladder ]",
+  "[ 53/14 → 27/7 | note:a s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:ladder ]",
+  "[ 27/7 → 55/14 | note:c s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:ladder ]",
+  "[ 55/14 → 4/1 | note:d4 s:sawtooth cutoff:200 fanchor:0 lpenv:3 resonance:1 ftype:ladder ]",
 ]
 `;
 
@@ -3859,82 +4229,82 @@ exports[`runs examples > example "loopAtCps" example index 0 1`] = `
 
 exports[`runs examples > example "loopBegin" example index 0 1`] = `
 [
-  "[ 0/1 → 1/1 | s:space loop:1 loopBegin:0 analyze:1 ]",
-  "[ 1/1 → 2/1 | s:space loop:1 loopBegin:0.125 analyze:1 ]",
-  "[ 2/1 → 3/1 | s:space loop:1 loopBegin:0.25 analyze:1 ]",
-  "[ 3/1 → 4/1 | s:space loop:1 loopBegin:0 analyze:1 ]",
+  "[ 0/1 → 1/1 | s:space loop:1 loopBegin:0 ]",
+  "[ 1/1 → 2/1 | s:space loop:1 loopBegin:0.125 ]",
+  "[ 2/1 → 3/1 | s:space loop:1 loopBegin:0.25 ]",
+  "[ 3/1 → 4/1 | s:space loop:1 loopBegin:0 ]",
 ]
 `;
 
 exports[`runs examples > example "loopEnd" example index 0 1`] = `
 [
-  "[ 0/1 → 1/1 | s:space loop:1 loopEnd:1 analyze:1 ]",
-  "[ 1/1 → 2/1 | s:space loop:1 loopEnd:0.75 analyze:1 ]",
-  "[ 2/1 → 3/1 | s:space loop:1 loopEnd:0.5 analyze:1 ]",
-  "[ 3/1 → 4/1 | s:space loop:1 loopEnd:0.25 analyze:1 ]",
+  "[ 0/1 → 1/1 | s:space loop:1 loopEnd:1 ]",
+  "[ 1/1 → 2/1 | s:space loop:1 loopEnd:0.75 ]",
+  "[ 2/1 → 3/1 | s:space loop:1 loopEnd:0.5 ]",
+  "[ 3/1 → 4/1 | s:space loop:1 loopEnd:0.25 ]",
 ]
 `;
 
 exports[`runs examples > example "lpattack" example index 0 1`] = `
 [
-  "[ 0/1 → 1/4 | note:c2 s:sawtooth cutoff:500 lpattack:0.5 lpenv:4 ]",
-  "[ 1/4 → 1/2 | note:e2 s:sawtooth cutoff:500 lpattack:0.5 lpenv:4 ]",
-  "[ 1/2 → 3/4 | note:f2 s:sawtooth cutoff:500 lpattack:0.5 lpenv:4 ]",
-  "[ 3/4 → 1/1 | note:g2 s:sawtooth cutoff:500 lpattack:0.5 lpenv:4 ]",
-  "[ 1/1 → 5/4 | note:c2 s:sawtooth cutoff:500 lpattack:0.5 lpenv:4 ]",
-  "[ 5/4 → 3/2 | note:e2 s:sawtooth cutoff:500 lpattack:0.5 lpenv:4 ]",
-  "[ 3/2 → 7/4 | note:f2 s:sawtooth cutoff:500 lpattack:0.5 lpenv:4 ]",
-  "[ 7/4 → 2/1 | note:g2 s:sawtooth cutoff:500 lpattack:0.5 lpenv:4 ]",
-  "[ 2/1 → 9/4 | note:c2 s:sawtooth cutoff:500 lpattack:0.5 lpenv:4 ]",
-  "[ 9/4 → 5/2 | note:e2 s:sawtooth cutoff:500 lpattack:0.5 lpenv:4 ]",
-  "[ 5/2 → 11/4 | note:f2 s:sawtooth cutoff:500 lpattack:0.5 lpenv:4 ]",
-  "[ 11/4 → 3/1 | note:g2 s:sawtooth cutoff:500 lpattack:0.5 lpenv:4 ]",
-  "[ 3/1 → 13/4 | note:c2 s:sawtooth cutoff:500 lpattack:0.5 lpenv:4 ]",
-  "[ 13/4 → 7/2 | note:e2 s:sawtooth cutoff:500 lpattack:0.5 lpenv:4 ]",
-  "[ 7/2 → 15/4 | note:f2 s:sawtooth cutoff:500 lpattack:0.5 lpenv:4 ]",
-  "[ 15/4 → 4/1 | note:g2 s:sawtooth cutoff:500 lpattack:0.5 lpenv:4 ]",
+  "[ 0/1 → 1/4 | note:c2 s:sawtooth cutoff:300 lpattack:0.5 lpenv:4 ]",
+  "[ 1/4 → 1/2 | note:e2 s:sawtooth cutoff:300 lpattack:0.5 lpenv:4 ]",
+  "[ 1/2 → 3/4 | note:f2 s:sawtooth cutoff:300 lpattack:0.5 lpenv:4 ]",
+  "[ 3/4 → 1/1 | note:g2 s:sawtooth cutoff:300 lpattack:0.5 lpenv:4 ]",
+  "[ 1/1 → 5/4 | note:c2 s:sawtooth cutoff:300 lpattack:0.5 lpenv:4 ]",
+  "[ 5/4 → 3/2 | note:e2 s:sawtooth cutoff:300 lpattack:0.5 lpenv:4 ]",
+  "[ 3/2 → 7/4 | note:f2 s:sawtooth cutoff:300 lpattack:0.5 lpenv:4 ]",
+  "[ 7/4 → 2/1 | note:g2 s:sawtooth cutoff:300 lpattack:0.5 lpenv:4 ]",
+  "[ 2/1 → 9/4 | note:c2 s:sawtooth cutoff:300 lpattack:0.5 lpenv:4 ]",
+  "[ 9/4 → 5/2 | note:e2 s:sawtooth cutoff:300 lpattack:0.5 lpenv:4 ]",
+  "[ 5/2 → 11/4 | note:f2 s:sawtooth cutoff:300 lpattack:0.5 lpenv:4 ]",
+  "[ 11/4 → 3/1 | note:g2 s:sawtooth cutoff:300 lpattack:0.5 lpenv:4 ]",
+  "[ 3/1 → 13/4 | note:c2 s:sawtooth cutoff:300 lpattack:0.5 lpenv:4 ]",
+  "[ 13/4 → 7/2 | note:e2 s:sawtooth cutoff:300 lpattack:0.5 lpenv:4 ]",
+  "[ 7/2 → 15/4 | note:f2 s:sawtooth cutoff:300 lpattack:0.5 lpenv:4 ]",
+  "[ 15/4 → 4/1 | note:g2 s:sawtooth cutoff:300 lpattack:0.5 lpenv:4 ]",
 ]
 `;
 
 exports[`runs examples > example "lpdecay" example index 0 1`] = `
 [
-  "[ 0/1 → 1/4 | note:c2 s:sawtooth cutoff:500 lpdecay:0.5 lpsustain:0.2 lpenv:4 ]",
-  "[ 1/4 → 1/2 | note:e2 s:sawtooth cutoff:500 lpdecay:0.5 lpsustain:0.2 lpenv:4 ]",
-  "[ 1/2 → 3/4 | note:f2 s:sawtooth cutoff:500 lpdecay:0.5 lpsustain:0.2 lpenv:4 ]",
-  "[ 3/4 → 1/1 | note:g2 s:sawtooth cutoff:500 lpdecay:0.5 lpsustain:0.2 lpenv:4 ]",
-  "[ 1/1 → 5/4 | note:c2 s:sawtooth cutoff:500 lpdecay:0.5 lpsustain:0.2 lpenv:4 ]",
-  "[ 5/4 → 3/2 | note:e2 s:sawtooth cutoff:500 lpdecay:0.5 lpsustain:0.2 lpenv:4 ]",
-  "[ 3/2 → 7/4 | note:f2 s:sawtooth cutoff:500 lpdecay:0.5 lpsustain:0.2 lpenv:4 ]",
-  "[ 7/4 → 2/1 | note:g2 s:sawtooth cutoff:500 lpdecay:0.5 lpsustain:0.2 lpenv:4 ]",
-  "[ 2/1 → 9/4 | note:c2 s:sawtooth cutoff:500 lpdecay:0.5 lpsustain:0.2 lpenv:4 ]",
-  "[ 9/4 → 5/2 | note:e2 s:sawtooth cutoff:500 lpdecay:0.5 lpsustain:0.2 lpenv:4 ]",
-  "[ 5/2 → 11/4 | note:f2 s:sawtooth cutoff:500 lpdecay:0.5 lpsustain:0.2 lpenv:4 ]",
-  "[ 11/4 → 3/1 | note:g2 s:sawtooth cutoff:500 lpdecay:0.5 lpsustain:0.2 lpenv:4 ]",
-  "[ 3/1 → 13/4 | note:c2 s:sawtooth cutoff:500 lpdecay:0.5 lpsustain:0.2 lpenv:4 ]",
-  "[ 13/4 → 7/2 | note:e2 s:sawtooth cutoff:500 lpdecay:0.5 lpsustain:0.2 lpenv:4 ]",
-  "[ 7/2 → 15/4 | note:f2 s:sawtooth cutoff:500 lpdecay:0.5 lpsustain:0.2 lpenv:4 ]",
-  "[ 15/4 → 4/1 | note:g2 s:sawtooth cutoff:500 lpdecay:0.5 lpsustain:0.2 lpenv:4 ]",
+  "[ 0/1 → 1/4 | note:c2 s:sawtooth cutoff:300 lpdecay:0.5 lpenv:4 ]",
+  "[ 1/4 → 1/2 | note:e2 s:sawtooth cutoff:300 lpdecay:0.5 lpenv:4 ]",
+  "[ 1/2 → 3/4 | note:f2 s:sawtooth cutoff:300 lpdecay:0.5 lpenv:4 ]",
+  "[ 3/4 → 1/1 | note:g2 s:sawtooth cutoff:300 lpdecay:0.5 lpenv:4 ]",
+  "[ 1/1 → 5/4 | note:c2 s:sawtooth cutoff:300 lpdecay:0.5 lpenv:4 ]",
+  "[ 5/4 → 3/2 | note:e2 s:sawtooth cutoff:300 lpdecay:0.5 lpenv:4 ]",
+  "[ 3/2 → 7/4 | note:f2 s:sawtooth cutoff:300 lpdecay:0.5 lpenv:4 ]",
+  "[ 7/4 → 2/1 | note:g2 s:sawtooth cutoff:300 lpdecay:0.5 lpenv:4 ]",
+  "[ 2/1 → 9/4 | note:c2 s:sawtooth cutoff:300 lpdecay:0.5 lpenv:4 ]",
+  "[ 9/4 → 5/2 | note:e2 s:sawtooth cutoff:300 lpdecay:0.5 lpenv:4 ]",
+  "[ 5/2 → 11/4 | note:f2 s:sawtooth cutoff:300 lpdecay:0.5 lpenv:4 ]",
+  "[ 11/4 → 3/1 | note:g2 s:sawtooth cutoff:300 lpdecay:0.5 lpenv:4 ]",
+  "[ 3/1 → 13/4 | note:c2 s:sawtooth cutoff:300 lpdecay:0.5 lpenv:4 ]",
+  "[ 13/4 → 7/2 | note:e2 s:sawtooth cutoff:300 lpdecay:0.5 lpenv:4 ]",
+  "[ 7/2 → 15/4 | note:f2 s:sawtooth cutoff:300 lpdecay:0.5 lpenv:4 ]",
+  "[ 15/4 → 4/1 | note:g2 s:sawtooth cutoff:300 lpdecay:0.5 lpenv:4 ]",
 ]
 `;
 
 exports[`runs examples > example "lpenv" example index 0 1`] = `
 [
-  "[ 0/1 → 1/4 | note:c2 s:sawtooth cutoff:500 lpattack:0.5 lpenv:4 ]",
-  "[ 1/4 → 1/2 | note:e2 s:sawtooth cutoff:500 lpattack:0.5 lpenv:4 ]",
-  "[ 1/2 → 3/4 | note:f2 s:sawtooth cutoff:500 lpattack:0.5 lpenv:4 ]",
-  "[ 3/4 → 1/1 | note:g2 s:sawtooth cutoff:500 lpattack:0.5 lpenv:4 ]",
-  "[ 1/1 → 5/4 | note:c2 s:sawtooth cutoff:500 lpattack:0.5 lpenv:4 ]",
-  "[ 5/4 → 3/2 | note:e2 s:sawtooth cutoff:500 lpattack:0.5 lpenv:4 ]",
-  "[ 3/2 → 7/4 | note:f2 s:sawtooth cutoff:500 lpattack:0.5 lpenv:4 ]",
-  "[ 7/4 → 2/1 | note:g2 s:sawtooth cutoff:500 lpattack:0.5 lpenv:4 ]",
-  "[ 2/1 → 9/4 | note:c2 s:sawtooth cutoff:500 lpattack:0.5 lpenv:4 ]",
-  "[ 9/4 → 5/2 | note:e2 s:sawtooth cutoff:500 lpattack:0.5 lpenv:4 ]",
-  "[ 5/2 → 11/4 | note:f2 s:sawtooth cutoff:500 lpattack:0.5 lpenv:4 ]",
-  "[ 11/4 → 3/1 | note:g2 s:sawtooth cutoff:500 lpattack:0.5 lpenv:4 ]",
-  "[ 3/1 → 13/4 | note:c2 s:sawtooth cutoff:500 lpattack:0.5 lpenv:4 ]",
-  "[ 13/4 → 7/2 | note:e2 s:sawtooth cutoff:500 lpattack:0.5 lpenv:4 ]",
-  "[ 7/2 → 15/4 | note:f2 s:sawtooth cutoff:500 lpattack:0.5 lpenv:4 ]",
-  "[ 15/4 → 4/1 | note:g2 s:sawtooth cutoff:500 lpattack:0.5 lpenv:4 ]",
+  "[ 0/1 → 1/4 | note:c2 s:sawtooth cutoff:300 lpattack:0.5 lpenv:4 ]",
+  "[ 1/4 → 1/2 | note:e2 s:sawtooth cutoff:300 lpattack:0.5 lpenv:4 ]",
+  "[ 1/2 → 3/4 | note:f2 s:sawtooth cutoff:300 lpattack:0.5 lpenv:4 ]",
+  "[ 3/4 → 1/1 | note:g2 s:sawtooth cutoff:300 lpattack:0.5 lpenv:4 ]",
+  "[ 1/1 → 5/4 | note:c2 s:sawtooth cutoff:300 lpattack:0.5 lpenv:4 ]",
+  "[ 5/4 → 3/2 | note:e2 s:sawtooth cutoff:300 lpattack:0.5 lpenv:4 ]",
+  "[ 3/2 → 7/4 | note:f2 s:sawtooth cutoff:300 lpattack:0.5 lpenv:4 ]",
+  "[ 7/4 → 2/1 | note:g2 s:sawtooth cutoff:300 lpattack:0.5 lpenv:4 ]",
+  "[ 2/1 → 9/4 | note:c2 s:sawtooth cutoff:300 lpattack:0.5 lpenv:4 ]",
+  "[ 9/4 → 5/2 | note:e2 s:sawtooth cutoff:300 lpattack:0.5 lpenv:4 ]",
+  "[ 5/2 → 11/4 | note:f2 s:sawtooth cutoff:300 lpattack:0.5 lpenv:4 ]",
+  "[ 11/4 → 3/1 | note:g2 s:sawtooth cutoff:300 lpattack:0.5 lpenv:4 ]",
+  "[ 3/1 → 13/4 | note:c2 s:sawtooth cutoff:300 lpattack:0.5 lpenv:4 ]",
+  "[ 13/4 → 7/2 | note:e2 s:sawtooth cutoff:300 lpattack:0.5 lpenv:4 ]",
+  "[ 7/2 → 15/4 | note:f2 s:sawtooth cutoff:300 lpattack:0.5 lpenv:4 ]",
+  "[ 15/4 → 4/1 | note:g2 s:sawtooth cutoff:300 lpattack:0.5 lpenv:4 ]",
 ]
 `;
 
@@ -4107,43 +4477,43 @@ exports[`runs examples > example "lpq" example index 0 1`] = `
 
 exports[`runs examples > example "lprelease" example index 0 1`] = `
 [
-  "[ 0/1 → 1/4 | note:c2 s:sawtooth clip:0.5 cutoff:500 lpenv:4 lprelease:0.5 release:0.5 ]",
-  "[ 1/4 → 1/2 | note:e2 s:sawtooth clip:0.5 cutoff:500 lpenv:4 lprelease:0.5 release:0.5 ]",
-  "[ 1/2 → 3/4 | note:f2 s:sawtooth clip:0.5 cutoff:500 lpenv:4 lprelease:0.5 release:0.5 ]",
-  "[ 3/4 → 1/1 | note:g2 s:sawtooth clip:0.5 cutoff:500 lpenv:4 lprelease:0.5 release:0.5 ]",
-  "[ 1/1 → 5/4 | note:c2 s:sawtooth clip:0.5 cutoff:500 lpenv:4 lprelease:0.5 release:0.5 ]",
-  "[ 5/4 → 3/2 | note:e2 s:sawtooth clip:0.5 cutoff:500 lpenv:4 lprelease:0.5 release:0.5 ]",
-  "[ 3/2 → 7/4 | note:f2 s:sawtooth clip:0.5 cutoff:500 lpenv:4 lprelease:0.5 release:0.5 ]",
-  "[ 7/4 → 2/1 | note:g2 s:sawtooth clip:0.5 cutoff:500 lpenv:4 lprelease:0.5 release:0.5 ]",
-  "[ 2/1 → 9/4 | note:c2 s:sawtooth clip:0.5 cutoff:500 lpenv:4 lprelease:0.5 release:0.5 ]",
-  "[ 9/4 → 5/2 | note:e2 s:sawtooth clip:0.5 cutoff:500 lpenv:4 lprelease:0.5 release:0.5 ]",
-  "[ 5/2 → 11/4 | note:f2 s:sawtooth clip:0.5 cutoff:500 lpenv:4 lprelease:0.5 release:0.5 ]",
-  "[ 11/4 → 3/1 | note:g2 s:sawtooth clip:0.5 cutoff:500 lpenv:4 lprelease:0.5 release:0.5 ]",
-  "[ 3/1 → 13/4 | note:c2 s:sawtooth clip:0.5 cutoff:500 lpenv:4 lprelease:0.5 release:0.5 ]",
-  "[ 13/4 → 7/2 | note:e2 s:sawtooth clip:0.5 cutoff:500 lpenv:4 lprelease:0.5 release:0.5 ]",
-  "[ 7/2 → 15/4 | note:f2 s:sawtooth clip:0.5 cutoff:500 lpenv:4 lprelease:0.5 release:0.5 ]",
-  "[ 15/4 → 4/1 | note:g2 s:sawtooth clip:0.5 cutoff:500 lpenv:4 lprelease:0.5 release:0.5 ]",
+  "[ 0/1 → 1/4 | note:c2 s:sawtooth clip:0.5 cutoff:300 lpenv:4 lprelease:0.5 release:0.5 ]",
+  "[ 1/4 → 1/2 | note:e2 s:sawtooth clip:0.5 cutoff:300 lpenv:4 lprelease:0.5 release:0.5 ]",
+  "[ 1/2 → 3/4 | note:f2 s:sawtooth clip:0.5 cutoff:300 lpenv:4 lprelease:0.5 release:0.5 ]",
+  "[ 3/4 → 1/1 | note:g2 s:sawtooth clip:0.5 cutoff:300 lpenv:4 lprelease:0.5 release:0.5 ]",
+  "[ 1/1 → 5/4 | note:c2 s:sawtooth clip:0.5 cutoff:300 lpenv:4 lprelease:0.5 release:0.5 ]",
+  "[ 5/4 → 3/2 | note:e2 s:sawtooth clip:0.5 cutoff:300 lpenv:4 lprelease:0.5 release:0.5 ]",
+  "[ 3/2 → 7/4 | note:f2 s:sawtooth clip:0.5 cutoff:300 lpenv:4 lprelease:0.5 release:0.5 ]",
+  "[ 7/4 → 2/1 | note:g2 s:sawtooth clip:0.5 cutoff:300 lpenv:4 lprelease:0.5 release:0.5 ]",
+  "[ 2/1 → 9/4 | note:c2 s:sawtooth clip:0.5 cutoff:300 lpenv:4 lprelease:0.5 release:0.5 ]",
+  "[ 9/4 → 5/2 | note:e2 s:sawtooth clip:0.5 cutoff:300 lpenv:4 lprelease:0.5 release:0.5 ]",
+  "[ 5/2 → 11/4 | note:f2 s:sawtooth clip:0.5 cutoff:300 lpenv:4 lprelease:0.5 release:0.5 ]",
+  "[ 11/4 → 3/1 | note:g2 s:sawtooth clip:0.5 cutoff:300 lpenv:4 lprelease:0.5 release:0.5 ]",
+  "[ 3/1 → 13/4 | note:c2 s:sawtooth clip:0.5 cutoff:300 lpenv:4 lprelease:0.5 release:0.5 ]",
+  "[ 13/4 → 7/2 | note:e2 s:sawtooth clip:0.5 cutoff:300 lpenv:4 lprelease:0.5 release:0.5 ]",
+  "[ 7/2 → 15/4 | note:f2 s:sawtooth clip:0.5 cutoff:300 lpenv:4 lprelease:0.5 release:0.5 ]",
+  "[ 15/4 → 4/1 | note:g2 s:sawtooth clip:0.5 cutoff:300 lpenv:4 lprelease:0.5 release:0.5 ]",
 ]
 `;
 
 exports[`runs examples > example "lpsustain" example index 0 1`] = `
 [
-  "[ 0/1 → 1/4 | note:c2 s:sawtooth cutoff:500 lpdecay:0.5 lpsustain:0 lpenv:4 ]",
-  "[ 1/4 → 1/2 | note:e2 s:sawtooth cutoff:500 lpdecay:0.5 lpsustain:0 lpenv:4 ]",
-  "[ 1/2 → 3/4 | note:f2 s:sawtooth cutoff:500 lpdecay:0.5 lpsustain:0 lpenv:4 ]",
-  "[ 3/4 → 1/1 | note:g2 s:sawtooth cutoff:500 lpdecay:0.5 lpsustain:0 lpenv:4 ]",
-  "[ 1/1 → 5/4 | note:c2 s:sawtooth cutoff:500 lpdecay:0.5 lpsustain:0 lpenv:4 ]",
-  "[ 5/4 → 3/2 | note:e2 s:sawtooth cutoff:500 lpdecay:0.5 lpsustain:0 lpenv:4 ]",
-  "[ 3/2 → 7/4 | note:f2 s:sawtooth cutoff:500 lpdecay:0.5 lpsustain:0 lpenv:4 ]",
-  "[ 7/4 → 2/1 | note:g2 s:sawtooth cutoff:500 lpdecay:0.5 lpsustain:0 lpenv:4 ]",
-  "[ 2/1 → 9/4 | note:c2 s:sawtooth cutoff:500 lpdecay:0.5 lpsustain:0 lpenv:4 ]",
-  "[ 9/4 → 5/2 | note:e2 s:sawtooth cutoff:500 lpdecay:0.5 lpsustain:0 lpenv:4 ]",
-  "[ 5/2 → 11/4 | note:f2 s:sawtooth cutoff:500 lpdecay:0.5 lpsustain:0 lpenv:4 ]",
-  "[ 11/4 → 3/1 | note:g2 s:sawtooth cutoff:500 lpdecay:0.5 lpsustain:0 lpenv:4 ]",
-  "[ 3/1 → 13/4 | note:c2 s:sawtooth cutoff:500 lpdecay:0.5 lpsustain:0 lpenv:4 ]",
-  "[ 13/4 → 7/2 | note:e2 s:sawtooth cutoff:500 lpdecay:0.5 lpsustain:0 lpenv:4 ]",
-  "[ 7/2 → 15/4 | note:f2 s:sawtooth cutoff:500 lpdecay:0.5 lpsustain:0 lpenv:4 ]",
-  "[ 15/4 → 4/1 | note:g2 s:sawtooth cutoff:500 lpdecay:0.5 lpsustain:0 lpenv:4 ]",
+  "[ 0/1 → 1/4 | note:c2 s:sawtooth cutoff:300 lpdecay:0.5 lpsustain:0 lpenv:4 ]",
+  "[ 1/4 → 1/2 | note:e2 s:sawtooth cutoff:300 lpdecay:0.5 lpsustain:0 lpenv:4 ]",
+  "[ 1/2 → 3/4 | note:f2 s:sawtooth cutoff:300 lpdecay:0.5 lpsustain:0 lpenv:4 ]",
+  "[ 3/4 → 1/1 | note:g2 s:sawtooth cutoff:300 lpdecay:0.5 lpsustain:0 lpenv:4 ]",
+  "[ 1/1 → 5/4 | note:c2 s:sawtooth cutoff:300 lpdecay:0.5 lpsustain:0 lpenv:4 ]",
+  "[ 5/4 → 3/2 | note:e2 s:sawtooth cutoff:300 lpdecay:0.5 lpsustain:0 lpenv:4 ]",
+  "[ 3/2 → 7/4 | note:f2 s:sawtooth cutoff:300 lpdecay:0.5 lpsustain:0 lpenv:4 ]",
+  "[ 7/4 → 2/1 | note:g2 s:sawtooth cutoff:300 lpdecay:0.5 lpsustain:0 lpenv:4 ]",
+  "[ 2/1 → 9/4 | note:c2 s:sawtooth cutoff:300 lpdecay:0.5 lpsustain:0 lpenv:4 ]",
+  "[ 9/4 → 5/2 | note:e2 s:sawtooth cutoff:300 lpdecay:0.5 lpsustain:0 lpenv:4 ]",
+  "[ 5/2 → 11/4 | note:f2 s:sawtooth cutoff:300 lpdecay:0.5 lpsustain:0 lpenv:4 ]",
+  "[ 11/4 → 3/1 | note:g2 s:sawtooth cutoff:300 lpdecay:0.5 lpsustain:0 lpenv:4 ]",
+  "[ 3/1 → 13/4 | note:c2 s:sawtooth cutoff:300 lpdecay:0.5 lpsustain:0 lpenv:4 ]",
+  "[ 13/4 → 7/2 | note:e2 s:sawtooth cutoff:300 lpdecay:0.5 lpsustain:0 lpenv:4 ]",
+  "[ 7/2 → 15/4 | note:f2 s:sawtooth cutoff:300 lpdecay:0.5 lpsustain:0 lpenv:4 ]",
+  "[ 15/4 → 4/1 | note:g2 s:sawtooth cutoff:300 lpdecay:0.5 lpsustain:0 lpenv:4 ]",
 ]
 `;
 
@@ -4181,6 +4551,27 @@ exports[`runs examples > example "lsize" example index 0 1`] = `
 ]
 `;
 
+exports[`runs examples > example "markcss" example index 0 1`] = `
+[
+  "[ 0/1 → 1/4 | note:c ]",
+  "[ 1/4 → 1/2 | note:a ]",
+  "[ 1/2 → 3/4 | note:f ]",
+  "[ 3/4 → 1/1 | note:e ]",
+  "[ 1/1 → 5/4 | note:c ]",
+  "[ 5/4 → 3/2 | note:a ]",
+  "[ 3/2 → 7/4 | note:f ]",
+  "[ 7/4 → 2/1 | note:e ]",
+  "[ 2/1 → 9/4 | note:c ]",
+  "[ 9/4 → 5/2 | note:a ]",
+  "[ 5/2 → 11/4 | note:f ]",
+  "[ 11/4 → 3/1 | note:e ]",
+  "[ 3/1 → 13/4 | note:c ]",
+  "[ 13/4 → 7/2 | note:a ]",
+  "[ 7/2 → 15/4 | note:f ]",
+  "[ 15/4 → 4/1 | note:e ]",
+]
+`;
+
 exports[`runs examples > example "mask" example index 0 1`] = `
 [
   "[ 0/1 → 1/4 | note:c ]",
@@ -4204,6 +4595,48 @@ exports[`runs examples > example "mask" example index 0 1`] = `
 ]
 `;
 
+exports[`runs examples > example "mousex" example index 0 1`] = `
+[
+  "[ 0/1 → 1/4 | note:C3 ]",
+  "[ 1/4 → 1/2 | note:C3 ]",
+  "[ 1/2 → 3/4 | note:C3 ]",
+  "[ 3/4 → 1/1 | note:C3 ]",
+  "[ 1/1 → 5/4 | note:C3 ]",
+  "[ 5/4 → 3/2 | note:C3 ]",
+  "[ 3/2 → 7/4 | note:C3 ]",
+  "[ 7/4 → 2/1 | note:C3 ]",
+  "[ 2/1 → 9/4 | note:C3 ]",
+  "[ 9/4 → 5/2 | note:C3 ]",
+  "[ 5/2 → 11/4 | note:C3 ]",
+  "[ 11/4 → 3/1 | note:C3 ]",
+  "[ 3/1 → 13/4 | note:C3 ]",
+  "[ 13/4 → 7/2 | note:C3 ]",
+  "[ 7/2 → 15/4 | note:C3 ]",
+  "[ 15/4 → 4/1 | note:C3 ]",
+]
+`;
+
+exports[`runs examples > example "mousey" example index 0 1`] = `
+[
+  "[ 0/1 → 1/4 | note:C3 ]",
+  "[ 1/4 → 1/2 | note:C3 ]",
+  "[ 1/2 → 3/4 | note:C3 ]",
+  "[ 3/4 → 1/1 | note:C3 ]",
+  "[ 1/1 → 5/4 | note:C3 ]",
+  "[ 5/4 → 3/2 | note:C3 ]",
+  "[ 3/2 → 7/4 | note:C3 ]",
+  "[ 7/4 → 2/1 | note:C3 ]",
+  "[ 2/1 → 9/4 | note:C3 ]",
+  "[ 9/4 → 5/2 | note:C3 ]",
+  "[ 5/2 → 11/4 | note:C3 ]",
+  "[ 11/4 → 3/1 | note:C3 ]",
+  "[ 3/1 → 13/4 | note:C3 ]",
+  "[ 13/4 → 7/2 | note:C3 ]",
+  "[ 7/2 → 15/4 | note:C3 ]",
+  "[ 15/4 → 4/1 | note:C3 ]",
+]
+`;
+
 exports[`runs examples > example "mul" example index 0 1`] = `
 [
   "[ 0/1 → 1/4 | freq:150 ]",
@@ -4712,182 +5145,182 @@ exports[`runs examples > example "perlin" example index 0 1`] = `
 
 exports[`runs examples > example "phaser" example index 0 1`] = `
 [
-  "[ 0/1 → 1/8 | note:D3 s:sawtooth release:0.5 phaser:1 ]",
-  "[ 1/8 → 1/4 | note:E3 s:sawtooth release:0.5 phaser:1 ]",
-  "[ 1/4 → 3/8 | note:F#3 s:sawtooth release:0.5 phaser:1 ]",
-  "[ 3/8 → 1/2 | note:A3 s:sawtooth release:0.5 phaser:1 ]",
-  "[ 1/2 → 5/8 | note:B3 s:sawtooth release:0.5 phaser:1 ]",
-  "[ 5/8 → 3/4 | note:D4 s:sawtooth release:0.5 phaser:1 ]",
-  "[ 3/4 → 7/8 | note:E4 s:sawtooth release:0.5 phaser:1 ]",
-  "[ 7/8 → 1/1 | note:F#4 s:sawtooth release:0.5 phaser:1 ]",
-  "[ 1/1 → 9/8 | note:D3 s:sawtooth release:0.5 phaser:2 ]",
-  "[ 9/8 → 5/4 | note:E3 s:sawtooth release:0.5 phaser:2 ]",
-  "[ 5/4 → 11/8 | note:F#3 s:sawtooth release:0.5 phaser:2 ]",
-  "[ 11/8 → 3/2 | note:A3 s:sawtooth release:0.5 phaser:2 ]",
-  "[ 3/2 → 13/8 | note:B3 s:sawtooth release:0.5 phaser:2 ]",
-  "[ 13/8 → 7/4 | note:D4 s:sawtooth release:0.5 phaser:2 ]",
-  "[ 7/4 → 15/8 | note:E4 s:sawtooth release:0.5 phaser:2 ]",
-  "[ 15/8 → 2/1 | note:F#4 s:sawtooth release:0.5 phaser:2 ]",
-  "[ 2/1 → 17/8 | note:D3 s:sawtooth release:0.5 phaser:4 ]",
-  "[ 17/8 → 9/4 | note:E3 s:sawtooth release:0.5 phaser:4 ]",
-  "[ 9/4 → 19/8 | note:F#3 s:sawtooth release:0.5 phaser:4 ]",
-  "[ 19/8 → 5/2 | note:A3 s:sawtooth release:0.5 phaser:4 ]",
-  "[ 5/2 → 21/8 | note:B3 s:sawtooth release:0.5 phaser:4 ]",
-  "[ 21/8 → 11/4 | note:D4 s:sawtooth release:0.5 phaser:4 ]",
-  "[ 11/4 → 23/8 | note:E4 s:sawtooth release:0.5 phaser:4 ]",
-  "[ 23/8 → 3/1 | note:F#4 s:sawtooth release:0.5 phaser:4 ]",
-  "[ 3/1 → 25/8 | note:D3 s:sawtooth release:0.5 phaser:8 ]",
-  "[ 25/8 → 13/4 | note:E3 s:sawtooth release:0.5 phaser:8 ]",
-  "[ 13/4 → 27/8 | note:F#3 s:sawtooth release:0.5 phaser:8 ]",
-  "[ 27/8 → 7/2 | note:A3 s:sawtooth release:0.5 phaser:8 ]",
-  "[ 7/2 → 29/8 | note:B3 s:sawtooth release:0.5 phaser:8 ]",
-  "[ 29/8 → 15/4 | note:D4 s:sawtooth release:0.5 phaser:8 ]",
-  "[ 15/4 → 31/8 | note:E4 s:sawtooth release:0.5 phaser:8 ]",
-  "[ 31/8 → 4/1 | note:F#4 s:sawtooth release:0.5 phaser:8 ]",
+  "[ 0/1 → 1/8 | note:D3 s:sawtooth release:0.5 phaserrate:1 ]",
+  "[ 1/8 → 1/4 | note:E3 s:sawtooth release:0.5 phaserrate:1 ]",
+  "[ 1/4 → 3/8 | note:F#3 s:sawtooth release:0.5 phaserrate:1 ]",
+  "[ 3/8 → 1/2 | note:A3 s:sawtooth release:0.5 phaserrate:1 ]",
+  "[ 1/2 → 5/8 | note:B3 s:sawtooth release:0.5 phaserrate:1 ]",
+  "[ 5/8 → 3/4 | note:D4 s:sawtooth release:0.5 phaserrate:1 ]",
+  "[ 3/4 → 7/8 | note:E4 s:sawtooth release:0.5 phaserrate:1 ]",
+  "[ 7/8 → 1/1 | note:F#4 s:sawtooth release:0.5 phaserrate:1 ]",
+  "[ 1/1 → 9/8 | note:D3 s:sawtooth release:0.5 phaserrate:2 ]",
+  "[ 9/8 → 5/4 | note:E3 s:sawtooth release:0.5 phaserrate:2 ]",
+  "[ 5/4 → 11/8 | note:F#3 s:sawtooth release:0.5 phaserrate:2 ]",
+  "[ 11/8 → 3/2 | note:A3 s:sawtooth release:0.5 phaserrate:2 ]",
+  "[ 3/2 → 13/8 | note:B3 s:sawtooth release:0.5 phaserrate:2 ]",
+  "[ 13/8 → 7/4 | note:D4 s:sawtooth release:0.5 phaserrate:2 ]",
+  "[ 7/4 → 15/8 | note:E4 s:sawtooth release:0.5 phaserrate:2 ]",
+  "[ 15/8 → 2/1 | note:F#4 s:sawtooth release:0.5 phaserrate:2 ]",
+  "[ 2/1 → 17/8 | note:D3 s:sawtooth release:0.5 phaserrate:4 ]",
+  "[ 17/8 → 9/4 | note:E3 s:sawtooth release:0.5 phaserrate:4 ]",
+  "[ 9/4 → 19/8 | note:F#3 s:sawtooth release:0.5 phaserrate:4 ]",
+  "[ 19/8 → 5/2 | note:A3 s:sawtooth release:0.5 phaserrate:4 ]",
+  "[ 5/2 → 21/8 | note:B3 s:sawtooth release:0.5 phaserrate:4 ]",
+  "[ 21/8 → 11/4 | note:D4 s:sawtooth release:0.5 phaserrate:4 ]",
+  "[ 11/4 → 23/8 | note:E4 s:sawtooth release:0.5 phaserrate:4 ]",
+  "[ 23/8 → 3/1 | note:F#4 s:sawtooth release:0.5 phaserrate:4 ]",
+  "[ 3/1 → 25/8 | note:D3 s:sawtooth release:0.5 phaserrate:8 ]",
+  "[ 25/8 → 13/4 | note:E3 s:sawtooth release:0.5 phaserrate:8 ]",
+  "[ 13/4 → 27/8 | note:F#3 s:sawtooth release:0.5 phaserrate:8 ]",
+  "[ 27/8 → 7/2 | note:A3 s:sawtooth release:0.5 phaserrate:8 ]",
+  "[ 7/2 → 29/8 | note:B3 s:sawtooth release:0.5 phaserrate:8 ]",
+  "[ 29/8 → 15/4 | note:D4 s:sawtooth release:0.5 phaserrate:8 ]",
+  "[ 15/4 → 31/8 | note:E4 s:sawtooth release:0.5 phaserrate:8 ]",
+  "[ 31/8 → 4/1 | note:F#4 s:sawtooth release:0.5 phaserrate:8 ]",
 ]
 `;
 
 exports[`runs examples > example "phasercenter" example index 0 1`] = `
 [
-  "[ 0/1 → 1/8 | note:D3 s:sawtooth release:0.5 phaser:2 phasercenter:800 ]",
-  "[ 1/8 → 1/4 | note:E3 s:sawtooth release:0.5 phaser:2 phasercenter:800 ]",
-  "[ 1/4 → 3/8 | note:F#3 s:sawtooth release:0.5 phaser:2 phasercenter:800 ]",
-  "[ 3/8 → 1/2 | note:A3 s:sawtooth release:0.5 phaser:2 phasercenter:800 ]",
-  "[ 1/2 → 5/8 | note:B3 s:sawtooth release:0.5 phaser:2 phasercenter:800 ]",
-  "[ 5/8 → 3/4 | note:D4 s:sawtooth release:0.5 phaser:2 phasercenter:800 ]",
-  "[ 3/4 → 7/8 | note:E4 s:sawtooth release:0.5 phaser:2 phasercenter:800 ]",
-  "[ 7/8 → 1/1 | note:F#4 s:sawtooth release:0.5 phaser:2 phasercenter:800 ]",
-  "[ 1/1 → 9/8 | note:D3 s:sawtooth release:0.5 phaser:2 phasercenter:2000 ]",
-  "[ 9/8 → 5/4 | note:E3 s:sawtooth release:0.5 phaser:2 phasercenter:2000 ]",
-  "[ 5/4 → 11/8 | note:F#3 s:sawtooth release:0.5 phaser:2 phasercenter:2000 ]",
-  "[ 11/8 → 3/2 | note:A3 s:sawtooth release:0.5 phaser:2 phasercenter:2000 ]",
-  "[ 3/2 → 13/8 | note:B3 s:sawtooth release:0.5 phaser:2 phasercenter:2000 ]",
-  "[ 13/8 → 7/4 | note:D4 s:sawtooth release:0.5 phaser:2 phasercenter:2000 ]",
-  "[ 7/4 → 15/8 | note:E4 s:sawtooth release:0.5 phaser:2 phasercenter:2000 ]",
-  "[ 15/8 → 2/1 | note:F#4 s:sawtooth release:0.5 phaser:2 phasercenter:2000 ]",
-  "[ 2/1 → 17/8 | note:D3 s:sawtooth release:0.5 phaser:2 phasercenter:4000 ]",
-  "[ 17/8 → 9/4 | note:E3 s:sawtooth release:0.5 phaser:2 phasercenter:4000 ]",
-  "[ 9/4 → 19/8 | note:F#3 s:sawtooth release:0.5 phaser:2 phasercenter:4000 ]",
-  "[ 19/8 → 5/2 | note:A3 s:sawtooth release:0.5 phaser:2 phasercenter:4000 ]",
-  "[ 5/2 → 21/8 | note:B3 s:sawtooth release:0.5 phaser:2 phasercenter:4000 ]",
-  "[ 21/8 → 11/4 | note:D4 s:sawtooth release:0.5 phaser:2 phasercenter:4000 ]",
-  "[ 11/4 → 23/8 | note:E4 s:sawtooth release:0.5 phaser:2 phasercenter:4000 ]",
-  "[ 23/8 → 3/1 | note:F#4 s:sawtooth release:0.5 phaser:2 phasercenter:4000 ]",
-  "[ 3/1 → 25/8 | note:D3 s:sawtooth release:0.5 phaser:2 phasercenter:800 ]",
-  "[ 25/8 → 13/4 | note:E3 s:sawtooth release:0.5 phaser:2 phasercenter:800 ]",
-  "[ 13/4 → 27/8 | note:F#3 s:sawtooth release:0.5 phaser:2 phasercenter:800 ]",
-  "[ 27/8 → 7/2 | note:A3 s:sawtooth release:0.5 phaser:2 phasercenter:800 ]",
-  "[ 7/2 → 29/8 | note:B3 s:sawtooth release:0.5 phaser:2 phasercenter:800 ]",
-  "[ 29/8 → 15/4 | note:D4 s:sawtooth release:0.5 phaser:2 phasercenter:800 ]",
-  "[ 15/4 → 31/8 | note:E4 s:sawtooth release:0.5 phaser:2 phasercenter:800 ]",
-  "[ 31/8 → 4/1 | note:F#4 s:sawtooth release:0.5 phaser:2 phasercenter:800 ]",
+  "[ 0/1 → 1/8 | note:D3 s:sawtooth release:0.5 phaserrate:2 phasercenter:800 ]",
+  "[ 1/8 → 1/4 | note:E3 s:sawtooth release:0.5 phaserrate:2 phasercenter:800 ]",
+  "[ 1/4 → 3/8 | note:F#3 s:sawtooth release:0.5 phaserrate:2 phasercenter:800 ]",
+  "[ 3/8 → 1/2 | note:A3 s:sawtooth release:0.5 phaserrate:2 phasercenter:800 ]",
+  "[ 1/2 → 5/8 | note:B3 s:sawtooth release:0.5 phaserrate:2 phasercenter:800 ]",
+  "[ 5/8 → 3/4 | note:D4 s:sawtooth release:0.5 phaserrate:2 phasercenter:800 ]",
+  "[ 3/4 → 7/8 | note:E4 s:sawtooth release:0.5 phaserrate:2 phasercenter:800 ]",
+  "[ 7/8 → 1/1 | note:F#4 s:sawtooth release:0.5 phaserrate:2 phasercenter:800 ]",
+  "[ 1/1 → 9/8 | note:D3 s:sawtooth release:0.5 phaserrate:2 phasercenter:2000 ]",
+  "[ 9/8 → 5/4 | note:E3 s:sawtooth release:0.5 phaserrate:2 phasercenter:2000 ]",
+  "[ 5/4 → 11/8 | note:F#3 s:sawtooth release:0.5 phaserrate:2 phasercenter:2000 ]",
+  "[ 11/8 → 3/2 | note:A3 s:sawtooth release:0.5 phaserrate:2 phasercenter:2000 ]",
+  "[ 3/2 → 13/8 | note:B3 s:sawtooth release:0.5 phaserrate:2 phasercenter:2000 ]",
+  "[ 13/8 → 7/4 | note:D4 s:sawtooth release:0.5 phaserrate:2 phasercenter:2000 ]",
+  "[ 7/4 → 15/8 | note:E4 s:sawtooth release:0.5 phaserrate:2 phasercenter:2000 ]",
+  "[ 15/8 → 2/1 | note:F#4 s:sawtooth release:0.5 phaserrate:2 phasercenter:2000 ]",
+  "[ 2/1 → 17/8 | note:D3 s:sawtooth release:0.5 phaserrate:2 phasercenter:4000 ]",
+  "[ 17/8 → 9/4 | note:E3 s:sawtooth release:0.5 phaserrate:2 phasercenter:4000 ]",
+  "[ 9/4 → 19/8 | note:F#3 s:sawtooth release:0.5 phaserrate:2 phasercenter:4000 ]",
+  "[ 19/8 → 5/2 | note:A3 s:sawtooth release:0.5 phaserrate:2 phasercenter:4000 ]",
+  "[ 5/2 → 21/8 | note:B3 s:sawtooth release:0.5 phaserrate:2 phasercenter:4000 ]",
+  "[ 21/8 → 11/4 | note:D4 s:sawtooth release:0.5 phaserrate:2 phasercenter:4000 ]",
+  "[ 11/4 → 23/8 | note:E4 s:sawtooth release:0.5 phaserrate:2 phasercenter:4000 ]",
+  "[ 23/8 → 3/1 | note:F#4 s:sawtooth release:0.5 phaserrate:2 phasercenter:4000 ]",
+  "[ 3/1 → 25/8 | note:D3 s:sawtooth release:0.5 phaserrate:2 phasercenter:800 ]",
+  "[ 25/8 → 13/4 | note:E3 s:sawtooth release:0.5 phaserrate:2 phasercenter:800 ]",
+  "[ 13/4 → 27/8 | note:F#3 s:sawtooth release:0.5 phaserrate:2 phasercenter:800 ]",
+  "[ 27/8 → 7/2 | note:A3 s:sawtooth release:0.5 phaserrate:2 phasercenter:800 ]",
+  "[ 7/2 → 29/8 | note:B3 s:sawtooth release:0.5 phaserrate:2 phasercenter:800 ]",
+  "[ 29/8 → 15/4 | note:D4 s:sawtooth release:0.5 phaserrate:2 phasercenter:800 ]",
+  "[ 15/4 → 31/8 | note:E4 s:sawtooth release:0.5 phaserrate:2 phasercenter:800 ]",
+  "[ 31/8 → 4/1 | note:F#4 s:sawtooth release:0.5 phaserrate:2 phasercenter:800 ]",
 ]
 `;
 
 exports[`runs examples > example "phaserdepth" example index 0 1`] = `
 [
-  "[ 0/1 → 1/8 | note:D3 s:sawtooth release:0.5 phaser:2 phaserdepth:0 ]",
-  "[ 1/8 → 1/4 | note:E3 s:sawtooth release:0.5 phaser:2 phaserdepth:0 ]",
-  "[ 1/4 → 3/8 | note:F#3 s:sawtooth release:0.5 phaser:2 phaserdepth:0 ]",
-  "[ 3/8 → 1/2 | note:A3 s:sawtooth release:0.5 phaser:2 phaserdepth:0 ]",
-  "[ 1/2 → 5/8 | note:B3 s:sawtooth release:0.5 phaser:2 phaserdepth:0 ]",
-  "[ 5/8 → 3/4 | note:D4 s:sawtooth release:0.5 phaser:2 phaserdepth:0 ]",
-  "[ 3/4 → 7/8 | note:E4 s:sawtooth release:0.5 phaser:2 phaserdepth:0 ]",
-  "[ 7/8 → 1/1 | note:F#4 s:sawtooth release:0.5 phaser:2 phaserdepth:0 ]",
-  "[ 1/1 → 9/8 | note:D3 s:sawtooth release:0.5 phaser:2 phaserdepth:0.5 ]",
-  "[ 9/8 → 5/4 | note:E3 s:sawtooth release:0.5 phaser:2 phaserdepth:0.5 ]",
-  "[ 5/4 → 11/8 | note:F#3 s:sawtooth release:0.5 phaser:2 phaserdepth:0.5 ]",
-  "[ 11/8 → 3/2 | note:A3 s:sawtooth release:0.5 phaser:2 phaserdepth:0.5 ]",
-  "[ 3/2 → 13/8 | note:B3 s:sawtooth release:0.5 phaser:2 phaserdepth:0.5 ]",
-  "[ 13/8 → 7/4 | note:D4 s:sawtooth release:0.5 phaser:2 phaserdepth:0.5 ]",
-  "[ 7/4 → 15/8 | note:E4 s:sawtooth release:0.5 phaser:2 phaserdepth:0.5 ]",
-  "[ 15/8 → 2/1 | note:F#4 s:sawtooth release:0.5 phaser:2 phaserdepth:0.5 ]",
-  "[ 2/1 → 17/8 | note:D3 s:sawtooth release:0.5 phaser:2 phaserdepth:0.75 ]",
-  "[ 17/8 → 9/4 | note:E3 s:sawtooth release:0.5 phaser:2 phaserdepth:0.75 ]",
-  "[ 9/4 → 19/8 | note:F#3 s:sawtooth release:0.5 phaser:2 phaserdepth:0.75 ]",
-  "[ 19/8 → 5/2 | note:A3 s:sawtooth release:0.5 phaser:2 phaserdepth:0.75 ]",
-  "[ 5/2 → 21/8 | note:B3 s:sawtooth release:0.5 phaser:2 phaserdepth:0.75 ]",
-  "[ 21/8 → 11/4 | note:D4 s:sawtooth release:0.5 phaser:2 phaserdepth:0.75 ]",
-  "[ 11/4 → 23/8 | note:E4 s:sawtooth release:0.5 phaser:2 phaserdepth:0.75 ]",
-  "[ 23/8 → 3/1 | note:F#4 s:sawtooth release:0.5 phaser:2 phaserdepth:0.75 ]",
-  "[ 3/1 → 25/8 | note:D3 s:sawtooth release:0.5 phaser:2 phaserdepth:1 ]",
-  "[ 25/8 → 13/4 | note:E3 s:sawtooth release:0.5 phaser:2 phaserdepth:1 ]",
-  "[ 13/4 → 27/8 | note:F#3 s:sawtooth release:0.5 phaser:2 phaserdepth:1 ]",
-  "[ 27/8 → 7/2 | note:A3 s:sawtooth release:0.5 phaser:2 phaserdepth:1 ]",
-  "[ 7/2 → 29/8 | note:B3 s:sawtooth release:0.5 phaser:2 phaserdepth:1 ]",
-  "[ 29/8 → 15/4 | note:D4 s:sawtooth release:0.5 phaser:2 phaserdepth:1 ]",
-  "[ 15/4 → 31/8 | note:E4 s:sawtooth release:0.5 phaser:2 phaserdepth:1 ]",
-  "[ 31/8 → 4/1 | note:F#4 s:sawtooth release:0.5 phaser:2 phaserdepth:1 ]",
+  "[ 0/1 → 1/8 | note:D3 s:sawtooth release:0.5 phaserrate:2 phaserdepth:0 ]",
+  "[ 1/8 → 1/4 | note:E3 s:sawtooth release:0.5 phaserrate:2 phaserdepth:0 ]",
+  "[ 1/4 → 3/8 | note:F#3 s:sawtooth release:0.5 phaserrate:2 phaserdepth:0 ]",
+  "[ 3/8 → 1/2 | note:A3 s:sawtooth release:0.5 phaserrate:2 phaserdepth:0 ]",
+  "[ 1/2 → 5/8 | note:B3 s:sawtooth release:0.5 phaserrate:2 phaserdepth:0 ]",
+  "[ 5/8 → 3/4 | note:D4 s:sawtooth release:0.5 phaserrate:2 phaserdepth:0 ]",
+  "[ 3/4 → 7/8 | note:E4 s:sawtooth release:0.5 phaserrate:2 phaserdepth:0 ]",
+  "[ 7/8 → 1/1 | note:F#4 s:sawtooth release:0.5 phaserrate:2 phaserdepth:0 ]",
+  "[ 1/1 → 9/8 | note:D3 s:sawtooth release:0.5 phaserrate:2 phaserdepth:0.5 ]",
+  "[ 9/8 → 5/4 | note:E3 s:sawtooth release:0.5 phaserrate:2 phaserdepth:0.5 ]",
+  "[ 5/4 → 11/8 | note:F#3 s:sawtooth release:0.5 phaserrate:2 phaserdepth:0.5 ]",
+  "[ 11/8 → 3/2 | note:A3 s:sawtooth release:0.5 phaserrate:2 phaserdepth:0.5 ]",
+  "[ 3/2 → 13/8 | note:B3 s:sawtooth release:0.5 phaserrate:2 phaserdepth:0.5 ]",
+  "[ 13/8 → 7/4 | note:D4 s:sawtooth release:0.5 phaserrate:2 phaserdepth:0.5 ]",
+  "[ 7/4 → 15/8 | note:E4 s:sawtooth release:0.5 phaserrate:2 phaserdepth:0.5 ]",
+  "[ 15/8 → 2/1 | note:F#4 s:sawtooth release:0.5 phaserrate:2 phaserdepth:0.5 ]",
+  "[ 2/1 → 17/8 | note:D3 s:sawtooth release:0.5 phaserrate:2 phaserdepth:0.75 ]",
+  "[ 17/8 → 9/4 | note:E3 s:sawtooth release:0.5 phaserrate:2 phaserdepth:0.75 ]",
+  "[ 9/4 → 19/8 | note:F#3 s:sawtooth release:0.5 phaserrate:2 phaserdepth:0.75 ]",
+  "[ 19/8 → 5/2 | note:A3 s:sawtooth release:0.5 phaserrate:2 phaserdepth:0.75 ]",
+  "[ 5/2 → 21/8 | note:B3 s:sawtooth release:0.5 phaserrate:2 phaserdepth:0.75 ]",
+  "[ 21/8 → 11/4 | note:D4 s:sawtooth release:0.5 phaserrate:2 phaserdepth:0.75 ]",
+  "[ 11/4 → 23/8 | note:E4 s:sawtooth release:0.5 phaserrate:2 phaserdepth:0.75 ]",
+  "[ 23/8 → 3/1 | note:F#4 s:sawtooth release:0.5 phaserrate:2 phaserdepth:0.75 ]",
+  "[ 3/1 → 25/8 | note:D3 s:sawtooth release:0.5 phaserrate:2 phaserdepth:1 ]",
+  "[ 25/8 → 13/4 | note:E3 s:sawtooth release:0.5 phaserrate:2 phaserdepth:1 ]",
+  "[ 13/4 → 27/8 | note:F#3 s:sawtooth release:0.5 phaserrate:2 phaserdepth:1 ]",
+  "[ 27/8 → 7/2 | note:A3 s:sawtooth release:0.5 phaserrate:2 phaserdepth:1 ]",
+  "[ 7/2 → 29/8 | note:B3 s:sawtooth release:0.5 phaserrate:2 phaserdepth:1 ]",
+  "[ 29/8 → 15/4 | note:D4 s:sawtooth release:0.5 phaserrate:2 phaserdepth:1 ]",
+  "[ 15/4 → 31/8 | note:E4 s:sawtooth release:0.5 phaserrate:2 phaserdepth:1 ]",
+  "[ 31/8 → 4/1 | note:F#4 s:sawtooth release:0.5 phaserrate:2 phaserdepth:1 ]",
 ]
 `;
 
 exports[`runs examples > example "phasersweep" example index 0 1`] = `
 [
-  "[ 0/1 → 1/8 | note:D3 s:sawtooth release:0.5 phaser:2 phasersweep:800 ]",
-  "[ 1/8 → 1/4 | note:E3 s:sawtooth release:0.5 phaser:2 phasersweep:800 ]",
-  "[ 1/4 → 3/8 | note:F#3 s:sawtooth release:0.5 phaser:2 phasersweep:800 ]",
-  "[ 3/8 → 1/2 | note:A3 s:sawtooth release:0.5 phaser:2 phasersweep:800 ]",
-  "[ 1/2 → 5/8 | note:B3 s:sawtooth release:0.5 phaser:2 phasersweep:800 ]",
-  "[ 5/8 → 3/4 | note:D4 s:sawtooth release:0.5 phaser:2 phasersweep:800 ]",
-  "[ 3/4 → 7/8 | note:E4 s:sawtooth release:0.5 phaser:2 phasersweep:800 ]",
-  "[ 7/8 → 1/1 | note:F#4 s:sawtooth release:0.5 phaser:2 phasersweep:800 ]",
-  "[ 1/1 → 9/8 | note:D3 s:sawtooth release:0.5 phaser:2 phasersweep:2000 ]",
-  "[ 9/8 → 5/4 | note:E3 s:sawtooth release:0.5 phaser:2 phasersweep:2000 ]",
-  "[ 5/4 → 11/8 | note:F#3 s:sawtooth release:0.5 phaser:2 phasersweep:2000 ]",
-  "[ 11/8 → 3/2 | note:A3 s:sawtooth release:0.5 phaser:2 phasersweep:2000 ]",
-  "[ 3/2 → 13/8 | note:B3 s:sawtooth release:0.5 phaser:2 phasersweep:2000 ]",
-  "[ 13/8 → 7/4 | note:D4 s:sawtooth release:0.5 phaser:2 phasersweep:2000 ]",
-  "[ 7/4 → 15/8 | note:E4 s:sawtooth release:0.5 phaser:2 phasersweep:2000 ]",
-  "[ 15/8 → 2/1 | note:F#4 s:sawtooth release:0.5 phaser:2 phasersweep:2000 ]",
-  "[ 2/1 → 17/8 | note:D3 s:sawtooth release:0.5 phaser:2 phasersweep:4000 ]",
-  "[ 17/8 → 9/4 | note:E3 s:sawtooth release:0.5 phaser:2 phasersweep:4000 ]",
-  "[ 9/4 → 19/8 | note:F#3 s:sawtooth release:0.5 phaser:2 phasersweep:4000 ]",
-  "[ 19/8 → 5/2 | note:A3 s:sawtooth release:0.5 phaser:2 phasersweep:4000 ]",
-  "[ 5/2 → 21/8 | note:B3 s:sawtooth release:0.5 phaser:2 phasersweep:4000 ]",
-  "[ 21/8 → 11/4 | note:D4 s:sawtooth release:0.5 phaser:2 phasersweep:4000 ]",
-  "[ 11/4 → 23/8 | note:E4 s:sawtooth release:0.5 phaser:2 phasersweep:4000 ]",
-  "[ 23/8 → 3/1 | note:F#4 s:sawtooth release:0.5 phaser:2 phasersweep:4000 ]",
-  "[ 3/1 → 25/8 | note:D3 s:sawtooth release:0.5 phaser:2 phasersweep:800 ]",
-  "[ 25/8 → 13/4 | note:E3 s:sawtooth release:0.5 phaser:2 phasersweep:800 ]",
-  "[ 13/4 → 27/8 | note:F#3 s:sawtooth release:0.5 phaser:2 phasersweep:800 ]",
-  "[ 27/8 → 7/2 | note:A3 s:sawtooth release:0.5 phaser:2 phasersweep:800 ]",
-  "[ 7/2 → 29/8 | note:B3 s:sawtooth release:0.5 phaser:2 phasersweep:800 ]",
-  "[ 29/8 → 15/4 | note:D4 s:sawtooth release:0.5 phaser:2 phasersweep:800 ]",
-  "[ 15/4 → 31/8 | note:E4 s:sawtooth release:0.5 phaser:2 phasersweep:800 ]",
-  "[ 31/8 → 4/1 | note:F#4 s:sawtooth release:0.5 phaser:2 phasersweep:800 ]",
+  "[ 0/1 → 1/8 | note:D3 s:sawtooth release:0.5 phaserrate:2 phasersweep:800 ]",
+  "[ 1/8 → 1/4 | note:E3 s:sawtooth release:0.5 phaserrate:2 phasersweep:800 ]",
+  "[ 1/4 → 3/8 | note:F#3 s:sawtooth release:0.5 phaserrate:2 phasersweep:800 ]",
+  "[ 3/8 → 1/2 | note:A3 s:sawtooth release:0.5 phaserrate:2 phasersweep:800 ]",
+  "[ 1/2 → 5/8 | note:B3 s:sawtooth release:0.5 phaserrate:2 phasersweep:800 ]",
+  "[ 5/8 → 3/4 | note:D4 s:sawtooth release:0.5 phaserrate:2 phasersweep:800 ]",
+  "[ 3/4 → 7/8 | note:E4 s:sawtooth release:0.5 phaserrate:2 phasersweep:800 ]",
+  "[ 7/8 → 1/1 | note:F#4 s:sawtooth release:0.5 phaserrate:2 phasersweep:800 ]",
+  "[ 1/1 → 9/8 | note:D3 s:sawtooth release:0.5 phaserrate:2 phasersweep:2000 ]",
+  "[ 9/8 → 5/4 | note:E3 s:sawtooth release:0.5 phaserrate:2 phasersweep:2000 ]",
+  "[ 5/4 → 11/8 | note:F#3 s:sawtooth release:0.5 phaserrate:2 phasersweep:2000 ]",
+  "[ 11/8 → 3/2 | note:A3 s:sawtooth release:0.5 phaserrate:2 phasersweep:2000 ]",
+  "[ 3/2 → 13/8 | note:B3 s:sawtooth release:0.5 phaserrate:2 phasersweep:2000 ]",
+  "[ 13/8 → 7/4 | note:D4 s:sawtooth release:0.5 phaserrate:2 phasersweep:2000 ]",
+  "[ 7/4 → 15/8 | note:E4 s:sawtooth release:0.5 phaserrate:2 phasersweep:2000 ]",
+  "[ 15/8 → 2/1 | note:F#4 s:sawtooth release:0.5 phaserrate:2 phasersweep:2000 ]",
+  "[ 2/1 → 17/8 | note:D3 s:sawtooth release:0.5 phaserrate:2 phasersweep:4000 ]",
+  "[ 17/8 → 9/4 | note:E3 s:sawtooth release:0.5 phaserrate:2 phasersweep:4000 ]",
+  "[ 9/4 → 19/8 | note:F#3 s:sawtooth release:0.5 phaserrate:2 phasersweep:4000 ]",
+  "[ 19/8 → 5/2 | note:A3 s:sawtooth release:0.5 phaserrate:2 phasersweep:4000 ]",
+  "[ 5/2 → 21/8 | note:B3 s:sawtooth release:0.5 phaserrate:2 phasersweep:4000 ]",
+  "[ 21/8 → 11/4 | note:D4 s:sawtooth release:0.5 phaserrate:2 phasersweep:4000 ]",
+  "[ 11/4 → 23/8 | note:E4 s:sawtooth release:0.5 phaserrate:2 phasersweep:4000 ]",
+  "[ 23/8 → 3/1 | note:F#4 s:sawtooth release:0.5 phaserrate:2 phasersweep:4000 ]",
+  "[ 3/1 → 25/8 | note:D3 s:sawtooth release:0.5 phaserrate:2 phasersweep:800 ]",
+  "[ 25/8 → 13/4 | note:E3 s:sawtooth release:0.5 phaserrate:2 phasersweep:800 ]",
+  "[ 13/4 → 27/8 | note:F#3 s:sawtooth release:0.5 phaserrate:2 phasersweep:800 ]",
+  "[ 27/8 → 7/2 | note:A3 s:sawtooth release:0.5 phaserrate:2 phasersweep:800 ]",
+  "[ 7/2 → 29/8 | note:B3 s:sawtooth release:0.5 phaserrate:2 phasersweep:800 ]",
+  "[ 29/8 → 15/4 | note:D4 s:sawtooth release:0.5 phaserrate:2 phasersweep:800 ]",
+  "[ 15/4 → 31/8 | note:E4 s:sawtooth release:0.5 phaserrate:2 phasersweep:800 ]",
+  "[ 31/8 → 4/1 | note:F#4 s:sawtooth release:0.5 phaserrate:2 phasersweep:800 ]",
 ]
 `;
 
 exports[`runs examples > example "pianoroll" example index 0 1`] = `
 [
-  "[ 0/1 → 1/8 | note:C2 s:piano clip:1 color:salmon ]",
-  "[ (1/4 → 1/3) ⇝ 3/8 | note:C2 s:piano clip:1 color:salmon ]",
-  "[ 1/4 ⇜ (1/3 → 3/8) | note:A2 s:piano clip:1 color:salmon ]",
-  "[ 3/8 → 1/2 | note:A2 s:piano clip:1 color:salmon ]",
-  "[ (5/8 → 2/3) ⇝ 3/4 | note:A2 s:piano clip:1 color:salmon ]",
-  "[ 5/8 ⇜ (2/3 → 3/4) | note:G2 s:piano clip:1 color:salmon ]",
-  "[ 3/4 → 7/8 | note:G2 s:piano clip:1 color:salmon ]",
-  "[ 1/1 → 9/8 | note:C2 s:piano clip:1 color:salmon ]",
-  "[ (5/4 → 4/3) ⇝ 11/8 | note:C2 s:piano clip:1 color:salmon ]",
-  "[ 5/4 ⇜ (4/3 → 11/8) | note:A2 s:piano clip:1 color:salmon ]",
-  "[ 11/8 → 3/2 | note:A2 s:piano clip:1 color:salmon ]",
-  "[ (13/8 → 5/3) ⇝ 7/4 | note:A2 s:piano clip:1 color:salmon ]",
-  "[ 13/8 ⇜ (5/3 → 7/4) | note:G2 s:piano clip:1 color:salmon ]",
-  "[ 7/4 → 15/8 | note:G2 s:piano clip:1 color:salmon ]",
-  "[ 2/1 → 17/8 | note:C2 s:piano clip:1 color:salmon ]",
-  "[ (9/4 → 7/3) ⇝ 19/8 | note:C2 s:piano clip:1 color:salmon ]",
-  "[ 9/4 ⇜ (7/3 → 19/8) | note:A2 s:piano clip:1 color:salmon ]",
-  "[ 19/8 → 5/2 | note:A2 s:piano clip:1 color:salmon ]",
-  "[ (21/8 → 8/3) ⇝ 11/4 | note:A2 s:piano clip:1 color:salmon ]",
-  "[ 21/8 ⇜ (8/3 → 11/4) | note:G2 s:piano clip:1 color:salmon ]",
-  "[ 11/4 → 23/8 | note:G2 s:piano clip:1 color:salmon ]",
-  "[ 3/1 → 25/8 | note:C2 s:piano clip:1 color:salmon ]",
-  "[ (13/4 → 10/3) ⇝ 27/8 | note:C2 s:piano clip:1 color:salmon ]",
-  "[ 13/4 ⇜ (10/3 → 27/8) | note:A2 s:piano clip:1 color:salmon ]",
-  "[ 27/8 → 7/2 | note:A2 s:piano clip:1 color:salmon ]",
-  "[ (29/8 → 11/3) ⇝ 15/4 | note:A2 s:piano clip:1 color:salmon ]",
-  "[ 29/8 ⇜ (11/3 → 15/4) | note:G2 s:piano clip:1 color:salmon ]",
-  "[ 15/4 → 31/8 | note:G2 s:piano clip:1 color:salmon ]",
+  "[ 0/1 → 1/8 | note:c2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ (1/4 → 1/3) ⇝ 3/8 | note:c2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 1/4 ⇜ (1/3 → 3/8) | note:a2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 3/8 → 1/2 | note:a2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ (5/8 → 2/3) ⇝ 3/4 | note:a2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 5/8 ⇜ (2/3 → 3/4) | note:eb2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 3/4 → 7/8 | note:eb2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 1/1 → 9/8 | note:c2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ (5/4 → 4/3) ⇝ 11/8 | note:c2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 5/4 ⇜ (4/3 → 11/8) | note:a2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 11/8 → 3/2 | note:a2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ (13/8 → 5/3) ⇝ 7/4 | note:a2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 13/8 ⇜ (5/3 → 7/4) | note:eb2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 7/4 → 15/8 | note:eb2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 2/1 → 17/8 | note:c2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ (9/4 → 7/3) ⇝ 19/8 | note:c2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 9/4 ⇜ (7/3 → 19/8) | note:a2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 19/8 → 5/2 | note:a2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ (21/8 → 8/3) ⇝ 11/4 | note:a2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 21/8 ⇜ (8/3 → 11/4) | note:eb2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 11/4 → 23/8 | note:eb2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 3/1 → 25/8 | note:c2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ (13/4 → 10/3) ⇝ 27/8 | note:c2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 13/4 ⇜ (10/3 → 27/8) | note:a2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 27/8 → 7/2 | note:a2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ (29/8 → 11/3) ⇝ 15/4 | note:a2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 29/8 ⇜ (11/3 → 15/4) | note:eb2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 15/4 → 31/8 | note:eb2 s:sawtooth lpenv:4 cutoff:300 ]",
 ]
 `;
 
@@ -5009,6 +5442,82 @@ exports[`runs examples > example "pickF" example index 1 1`] = `
 ]
 `;
 
+exports[`runs examples > example "pickmodRestart" example index 0 1`] = `
+[
+  "[ 0/1 → 1/4 | note:C3 s:piano ]",
+  "[ 1/4 → 1/2 | note:D3 s:piano ]",
+  "[ 1/2 → 3/4 | note:E3 s:piano ]",
+  "[ 3/4 → 1/1 | note:C3 s:piano ]",
+  "[ 1/1 → 5/4 | note:C3 s:piano ]",
+  "[ 5/4 → 3/2 | note:D3 s:piano ]",
+  "[ 3/2 → 7/4 | note:E3 s:piano ]",
+  "[ 7/4 → 2/1 | note:C3 s:piano ]",
+  "[ 2/1 → 9/4 | note:E3 s:piano ]",
+  "[ 9/4 → 5/2 | note:F3 s:piano ]",
+  "[ 5/2 → 11/4 | note:G3 s:piano ]",
+  "[ 3/1 → 13/4 | note:E3 s:piano ]",
+  "[ 13/4 → 7/2 | note:F3 s:piano ]",
+  "[ 7/2 → 15/4 | note:G3 s:piano ]",
+]
+`;
+
+exports[`runs examples > example "pitchwheel" example index 0 1`] = `
+[
+  "[ 0/1 → 1/13 | note:C3 s:sawtooth cutoff:500 ]",
+  "[ 1/13 → 2/13 | note:Db3 s:sawtooth cutoff:500 ]",
+  "[ 2/13 → 3/13 | note:D3 s:sawtooth cutoff:500 ]",
+  "[ 3/13 → 4/13 | note:Eb3 s:sawtooth cutoff:500 ]",
+  "[ 4/13 → 5/13 | note:E3 s:sawtooth cutoff:500 ]",
+  "[ 5/13 → 6/13 | note:F3 s:sawtooth cutoff:500 ]",
+  "[ 6/13 → 7/13 | note:Gb3 s:sawtooth cutoff:500 ]",
+  "[ 7/13 → 8/13 | note:G3 s:sawtooth cutoff:500 ]",
+  "[ 8/13 → 9/13 | note:Ab3 s:sawtooth cutoff:500 ]",
+  "[ 9/13 → 10/13 | note:A3 s:sawtooth cutoff:500 ]",
+  "[ 10/13 → 11/13 | note:Bb3 s:sawtooth cutoff:500 ]",
+  "[ 11/13 → 12/13 | note:B3 s:sawtooth cutoff:500 ]",
+  "[ 12/13 → 1/1 | note:C4 s:sawtooth cutoff:500 ]",
+  "[ 1/1 → 14/13 | note:C3 s:sawtooth cutoff:500 ]",
+  "[ 14/13 → 15/13 | note:Db3 s:sawtooth cutoff:500 ]",
+  "[ 15/13 → 16/13 | note:D3 s:sawtooth cutoff:500 ]",
+  "[ 16/13 → 17/13 | note:Eb3 s:sawtooth cutoff:500 ]",
+  "[ 17/13 → 18/13 | note:E3 s:sawtooth cutoff:500 ]",
+  "[ 18/13 → 19/13 | note:F3 s:sawtooth cutoff:500 ]",
+  "[ 19/13 → 20/13 | note:Gb3 s:sawtooth cutoff:500 ]",
+  "[ 20/13 → 21/13 | note:G3 s:sawtooth cutoff:500 ]",
+  "[ 21/13 → 22/13 | note:Ab3 s:sawtooth cutoff:500 ]",
+  "[ 22/13 → 23/13 | note:A3 s:sawtooth cutoff:500 ]",
+  "[ 23/13 → 24/13 | note:Bb3 s:sawtooth cutoff:500 ]",
+  "[ 24/13 → 25/13 | note:B3 s:sawtooth cutoff:500 ]",
+  "[ 25/13 → 2/1 | note:C4 s:sawtooth cutoff:500 ]",
+  "[ 2/1 → 27/13 | note:C3 s:sawtooth cutoff:500 ]",
+  "[ 27/13 → 28/13 | note:Db3 s:sawtooth cutoff:500 ]",
+  "[ 28/13 → 29/13 | note:D3 s:sawtooth cutoff:500 ]",
+  "[ 29/13 → 30/13 | note:Eb3 s:sawtooth cutoff:500 ]",
+  "[ 30/13 → 31/13 | note:E3 s:sawtooth cutoff:500 ]",
+  "[ 31/13 → 32/13 | note:F3 s:sawtooth cutoff:500 ]",
+  "[ 32/13 → 33/13 | note:Gb3 s:sawtooth cutoff:500 ]",
+  "[ 33/13 → 34/13 | note:G3 s:sawtooth cutoff:500 ]",
+  "[ 34/13 → 35/13 | note:Ab3 s:sawtooth cutoff:500 ]",
+  "[ 35/13 → 36/13 | note:A3 s:sawtooth cutoff:500 ]",
+  "[ 36/13 → 37/13 | note:Bb3 s:sawtooth cutoff:500 ]",
+  "[ 37/13 → 38/13 | note:B3 s:sawtooth cutoff:500 ]",
+  "[ 38/13 → 3/1 | note:C4 s:sawtooth cutoff:500 ]",
+  "[ 3/1 → 40/13 | note:C3 s:sawtooth cutoff:500 ]",
+  "[ 40/13 → 41/13 | note:Db3 s:sawtooth cutoff:500 ]",
+  "[ 41/13 → 42/13 | note:D3 s:sawtooth cutoff:500 ]",
+  "[ 42/13 → 43/13 | note:Eb3 s:sawtooth cutoff:500 ]",
+  "[ 43/13 → 44/13 | note:E3 s:sawtooth cutoff:500 ]",
+  "[ 44/13 → 45/13 | note:F3 s:sawtooth cutoff:500 ]",
+  "[ 45/13 → 46/13 | note:Gb3 s:sawtooth cutoff:500 ]",
+  "[ 46/13 → 47/13 | note:G3 s:sawtooth cutoff:500 ]",
+  "[ 47/13 → 48/13 | note:Ab3 s:sawtooth cutoff:500 ]",
+  "[ 48/13 → 49/13 | note:A3 s:sawtooth cutoff:500 ]",
+  "[ 49/13 → 50/13 | note:Bb3 s:sawtooth cutoff:500 ]",
+  "[ 50/13 → 51/13 | note:B3 s:sawtooth cutoff:500 ]",
+  "[ 51/13 → 4/1 | note:C4 s:sawtooth cutoff:500 ]",
+]
+`;
+
 exports[`runs examples > example "ply" example index 0 1`] = `
 [
   "[ 0/1 → 1/4 | s:bd ]",
@@ -5035,72 +5544,6 @@ exports[`runs examples > example "ply" example index 0 1`] = `
 ]
 `;
 
-exports[`runs examples > example "polymeter" example index 0 1`] = `
-[
-  "[ 0/1 → 1/3 | c ]",
-  "[ 0/1 → 1/3 | c2 ]",
-  "[ 1/3 → 2/3 | eb ]",
-  "[ 1/3 → 2/3 | g2 ]",
-  "[ 2/3 → 1/1 | g ]",
-  "[ 2/3 → 1/1 | c2 ]",
-  "[ 1/1 → 4/3 | c ]",
-  "[ 1/1 → 4/3 | g2 ]",
-  "[ 4/3 → 5/3 | eb ]",
-  "[ 4/3 → 5/3 | c2 ]",
-  "[ 5/3 → 2/1 | g ]",
-  "[ 5/3 → 2/1 | g2 ]",
-  "[ 2/1 → 7/3 | c ]",
-  "[ 2/1 → 7/3 | c2 ]",
-  "[ 7/3 → 8/3 | eb ]",
-  "[ 7/3 → 8/3 | g2 ]",
-  "[ 8/3 → 3/1 | g ]",
-  "[ 8/3 → 3/1 | c2 ]",
-  "[ 3/1 → 10/3 | c ]",
-  "[ 3/1 → 10/3 | g2 ]",
-  "[ 10/3 → 11/3 | eb ]",
-  "[ 10/3 → 11/3 | c2 ]",
-  "[ 11/3 → 4/1 | g ]",
-  "[ 11/3 → 4/1 | g2 ]",
-]
-`;
-
-exports[`runs examples > example "polymeterSteps" example index 0 1`] = `
-[
-  "[ 0/1 → 1/4 | c ]",
-  "[ 0/1 → 1/4 | e ]",
-  "[ 1/4 → 1/2 | d ]",
-  "[ 1/4 → 1/2 | f ]",
-  "[ 1/2 → 3/4 | c ]",
-  "[ 1/2 → 3/4 | g ]",
-  "[ 3/4 → 1/1 | d ]",
-  "[ 3/4 → 1/1 | e ]",
-  "[ 1/1 → 5/4 | c ]",
-  "[ 1/1 → 5/4 | f ]",
-  "[ 5/4 → 3/2 | d ]",
-  "[ 5/4 → 3/2 | g ]",
-  "[ 3/2 → 7/4 | c ]",
-  "[ 3/2 → 7/4 | e ]",
-  "[ 7/4 → 2/1 | d ]",
-  "[ 7/4 → 2/1 | f ]",
-  "[ 2/1 → 9/4 | c ]",
-  "[ 2/1 → 9/4 | g ]",
-  "[ 9/4 → 5/2 | d ]",
-  "[ 9/4 → 5/2 | e ]",
-  "[ 5/2 → 11/4 | c ]",
-  "[ 5/2 → 11/4 | f ]",
-  "[ 11/4 → 3/1 | d ]",
-  "[ 11/4 → 3/1 | g ]",
-  "[ 3/1 → 13/4 | c ]",
-  "[ 3/1 → 13/4 | e ]",
-  "[ 13/4 → 7/2 | d ]",
-  "[ 13/4 → 7/2 | f ]",
-  "[ 7/2 → 15/4 | c ]",
-  "[ 7/2 → 15/4 | g ]",
-  "[ 15/4 → 4/1 | d ]",
-  "[ 15/4 → 4/1 | e ]",
-]
-`;
-
 exports[`runs examples > example "postgain" example index 0 1`] = `
 [
   "[ 0/1 → 1/8 | s:hh compressor:-20 compressorRatio:20 compressorKnee:10 compressorAttack:0.002 compressorRelease:0.02 postgain:1.5 ]",
@@ -6037,67 +6480,67 @@ exports[`runs examples > example "s_cat" example index 1 1`] = `
 
 exports[`runs examples > example "s_polymeter" example index 0 1`] = `
 [
-  "[ 0/1 → 1/3 | c ]",
-  "[ 0/1 → 1/3 | c2 ]",
-  "[ 1/3 → 2/3 | eb ]",
-  "[ 1/3 → 2/3 | g2 ]",
-  "[ 2/3 → 1/1 | g ]",
-  "[ 2/3 → 1/1 | c2 ]",
-  "[ 1/1 → 4/3 | c ]",
-  "[ 1/1 → 4/3 | g2 ]",
-  "[ 4/3 → 5/3 | eb ]",
-  "[ 4/3 → 5/3 | c2 ]",
-  "[ 5/3 → 2/1 | g ]",
-  "[ 5/3 → 2/1 | g2 ]",
-  "[ 2/1 → 7/3 | c ]",
-  "[ 2/1 → 7/3 | c2 ]",
-  "[ 7/3 → 8/3 | eb ]",
-  "[ 7/3 → 8/3 | g2 ]",
-  "[ 8/3 → 3/1 | g ]",
-  "[ 8/3 → 3/1 | c2 ]",
-  "[ 3/1 → 10/3 | c ]",
-  "[ 3/1 → 10/3 | g2 ]",
-  "[ 10/3 → 11/3 | eb ]",
-  "[ 10/3 → 11/3 | c2 ]",
-  "[ 11/3 → 4/1 | g ]",
-  "[ 11/3 → 4/1 | g2 ]",
+  "[ 0/1 → 1/3 | note:c ]",
+  "[ 0/1 → 1/3 | note:c2 ]",
+  "[ 1/3 → 2/3 | note:eb ]",
+  "[ 1/3 → 2/3 | note:g2 ]",
+  "[ 2/3 → 1/1 | note:g ]",
+  "[ 2/3 → 1/1 | note:c2 ]",
+  "[ 1/1 → 4/3 | note:c ]",
+  "[ 1/1 → 4/3 | note:g2 ]",
+  "[ 4/3 → 5/3 | note:eb ]",
+  "[ 4/3 → 5/3 | note:c2 ]",
+  "[ 5/3 → 2/1 | note:g ]",
+  "[ 5/3 → 2/1 | note:g2 ]",
+  "[ 2/1 → 7/3 | note:c ]",
+  "[ 2/1 → 7/3 | note:c2 ]",
+  "[ 7/3 → 8/3 | note:eb ]",
+  "[ 7/3 → 8/3 | note:g2 ]",
+  "[ 8/3 → 3/1 | note:g ]",
+  "[ 8/3 → 3/1 | note:c2 ]",
+  "[ 3/1 → 10/3 | note:c ]",
+  "[ 3/1 → 10/3 | note:g2 ]",
+  "[ 10/3 → 11/3 | note:eb ]",
+  "[ 10/3 → 11/3 | note:c2 ]",
+  "[ 11/3 → 4/1 | note:g ]",
+  "[ 11/3 → 4/1 | note:g2 ]",
 ]
 `;
 
 exports[`runs examples > example "s_polymeterSteps" example index 0 1`] = `
 [
-  "[ 0/1 → 1/4 | c ]",
-  "[ 0/1 → 1/4 | e ]",
-  "[ 1/4 → 1/2 | d ]",
-  "[ 1/4 → 1/2 | f ]",
-  "[ 1/2 → 3/4 | c ]",
-  "[ 1/2 → 3/4 | g ]",
-  "[ 3/4 → 1/1 | d ]",
-  "[ 3/4 → 1/1 | e ]",
-  "[ 1/1 → 5/4 | c ]",
-  "[ 1/1 → 5/4 | f ]",
-  "[ 5/4 → 3/2 | d ]",
-  "[ 5/4 → 3/2 | g ]",
-  "[ 3/2 → 7/4 | c ]",
-  "[ 3/2 → 7/4 | e ]",
-  "[ 7/4 → 2/1 | d ]",
-  "[ 7/4 → 2/1 | f ]",
-  "[ 2/1 → 9/4 | c ]",
-  "[ 2/1 → 9/4 | g ]",
-  "[ 9/4 → 5/2 | d ]",
-  "[ 9/4 → 5/2 | e ]",
-  "[ 5/2 → 11/4 | c ]",
-  "[ 5/2 → 11/4 | f ]",
-  "[ 11/4 → 3/1 | d ]",
-  "[ 11/4 → 3/1 | g ]",
-  "[ 3/1 → 13/4 | c ]",
-  "[ 3/1 → 13/4 | e ]",
-  "[ 13/4 → 7/2 | d ]",
-  "[ 13/4 → 7/2 | f ]",
-  "[ 7/2 → 15/4 | c ]",
-  "[ 7/2 → 15/4 | g ]",
-  "[ 15/4 → 4/1 | d ]",
-  "[ 15/4 → 4/1 | e ]",
+  "[ 0/1 → 1/4 | note:c ]",
+  "[ 0/1 → 1/4 | note:e ]",
+  "[ 1/4 → 1/2 | note:d ]",
+  "[ 1/4 → 1/2 | note:f ]",
+  "[ 1/2 → 3/4 | note:c ]",
+  "[ 1/2 → 3/4 | note:g ]",
+  "[ 3/4 → 1/1 | note:d ]",
+  "[ 3/4 → 1/1 | note:e ]",
+  "[ 1/1 → 5/4 | note:c ]",
+  "[ 1/1 → 5/4 | note:f ]",
+  "[ 5/4 → 3/2 | note:d ]",
+  "[ 5/4 → 3/2 | note:g ]",
+  "[ 3/2 → 7/4 | note:c ]",
+  "[ 3/2 → 7/4 | note:e ]",
+  "[ 7/4 → 2/1 | note:d ]",
+  "[ 7/4 → 2/1 | note:f ]",
+  "[ 2/1 → 9/4 | note:c ]",
+  "[ 2/1 → 9/4 | note:g ]",
+  "[ 9/4 → 5/2 | note:d ]",
+  "[ 9/4 → 5/2 | note:e ]",
+  "[ 5/2 → 11/4 | note:c ]",
+  "[ 5/2 → 11/4 | note:f ]",
+  "[ 11/4 → 3/1 | note:d ]",
+  "[ 11/4 → 3/1 | note:g ]",
+  "[ 3/1 → 13/4 | note:c ]",
+  "[ 3/1 → 13/4 | note:e ]",
+  "[ 13/4 → 7/2 | note:d ]",
+  "[ 13/4 → 7/2 | note:f ]",
+  "[ 7/2 → 15/4 | note:c ]",
+  "[ 7/2 → 15/4 | note:g ]",
+  "[ 15/4 → 4/1 | note:d ]",
+  "[ 15/4 → 4/1 | note:e ]",
 ]
 `;
 
@@ -6395,10 +6838,60 @@ exports[`runs examples > example "scaleTranspose" example index 0 1`] = `
 
 exports[`runs examples > example "scope" example index 0 1`] = `
 [
-  "[ 0/1 → 1/1 | s:sawtooth analyze:1 ]",
-  "[ 1/1 → 2/1 | s:sawtooth analyze:1 ]",
-  "[ 2/1 → 3/1 | s:sawtooth analyze:1 ]",
-  "[ 3/1 → 4/1 | s:sawtooth analyze:1 ]",
+  "[ 0/1 → 1/1 | s:sawtooth ]",
+  "[ 1/1 → 2/1 | s:sawtooth ]",
+  "[ 2/1 → 3/1 | s:sawtooth ]",
+  "[ 3/1 → 4/1 | s:sawtooth ]",
+]
+`;
+
+exports[`runs examples > example "scramble
+Slices a pattern into the given number of parts, then plays those parts at random. Similar to \`shuffle\`,
+but parts might be played more than once, or not at all, per cycle." example index 0 1`] = `
+[
+  "[ 0/1 → 1/4 | note:e s:piano ]",
+  "[ 1/4 → 1/2 | note:d s:piano ]",
+  "[ 1/2 → 3/4 | note:c s:piano ]",
+  "[ 3/4 → 1/1 | note:d s:piano ]",
+  "[ 1/1 → 5/4 | note:e s:piano ]",
+  "[ 5/4 → 3/2 | note:c s:piano ]",
+  "[ 3/2 → 7/4 | note:d s:piano ]",
+  "[ 7/4 → 2/1 | note:e s:piano ]",
+  "[ 2/1 → 9/4 | note:f s:piano ]",
+  "[ 9/4 → 5/2 | note:f s:piano ]",
+  "[ 5/2 → 11/4 | note:c s:piano ]",
+  "[ 11/4 → 3/1 | note:c s:piano ]",
+  "[ 3/1 → 13/4 | note:d s:piano ]",
+  "[ 13/4 → 7/2 | note:d s:piano ]",
+  "[ 7/2 → 15/4 | note:f s:piano ]",
+  "[ 15/4 → 4/1 | note:e s:piano ]",
+]
+`;
+
+exports[`runs examples > example "scramble
+Slices a pattern into the given number of parts, then plays those parts at random. Similar to \`shuffle\`,
+but parts might be played more than once, or not at all, per cycle." example index 1 1`] = `
+[
+  "[ 0/1 → 1/8 | note:e s:piano ]",
+  "[ 1/8 → 1/4 | note:d s:piano ]",
+  "[ 1/4 → 3/8 | note:c s:piano ]",
+  "[ 3/8 → 1/2 | note:d s:piano ]",
+  "[ 1/2 → 1/1 | note:g s:piano ]",
+  "[ 1/1 → 9/8 | note:e s:piano ]",
+  "[ 9/8 → 5/4 | note:c s:piano ]",
+  "[ 5/4 → 11/8 | note:d s:piano ]",
+  "[ 11/8 → 3/2 | note:e s:piano ]",
+  "[ 3/2 → 2/1 | note:g s:piano ]",
+  "[ 2/1 → 17/8 | note:f s:piano ]",
+  "[ 17/8 → 9/4 | note:f s:piano ]",
+  "[ 9/4 → 19/8 | note:c s:piano ]",
+  "[ 19/8 → 5/2 | note:c s:piano ]",
+  "[ 5/2 → 3/1 | note:g s:piano ]",
+  "[ 3/1 → 25/8 | note:d s:piano ]",
+  "[ 25/8 → 13/4 | note:d s:piano ]",
+  "[ 13/4 → 27/8 | note:f s:piano ]",
+  "[ 27/8 → 7/2 | note:e s:piano ]",
+  "[ 7/2 → 4/1 | note:g s:piano ]",
 ]
 `;
 
@@ -6504,6 +6997,27 @@ exports[`runs examples > example "segment" example index 0 1`] = `
 `;
 
 exports[`runs examples > example "seq" example index 0 1`] = `
+[
+  "[ 0/1 → 1/3 | note:e5 ]",
+  "[ 1/3 → 2/3 | note:b4 ]",
+  "[ 2/3 → 5/6 | note:d5 ]",
+  "[ 5/6 → 1/1 | note:c5 ]",
+  "[ 1/1 → 4/3 | note:e5 ]",
+  "[ 4/3 → 5/3 | note:b4 ]",
+  "[ 5/3 → 11/6 | note:d5 ]",
+  "[ 11/6 → 2/1 | note:c5 ]",
+  "[ 2/1 → 7/3 | note:e5 ]",
+  "[ 7/3 → 8/3 | note:b4 ]",
+  "[ 8/3 → 17/6 | note:d5 ]",
+  "[ 17/6 → 3/1 | note:c5 ]",
+  "[ 3/1 → 10/3 | note:e5 ]",
+  "[ 10/3 → 11/3 | note:b4 ]",
+  "[ 11/3 → 23/6 | note:d5 ]",
+  "[ 23/6 → 4/1 | note:c5 ]",
+]
+`;
+
+exports[`runs examples > example "seq" example index 1 1`] = `
 [
   "[ 0/1 → 1/8 | s:hh ]",
   "[ 1/8 → 1/4 | s:hh ]",
@@ -6544,24 +7058,23 @@ exports[`runs examples > example "seq" example index 0 1`] = `
 ]
 `;
 
-exports[`runs examples > example "seq" example index 0 2`] = `
+exports[`runs examples > example "seqPLoop" example index 0 1`] = `
 [
-  "[ 0/1 → 1/3 | note:e5 ]",
-  "[ 1/3 → 2/3 | note:b4 ]",
-  "[ 2/3 → 5/6 | note:d5 ]",
-  "[ 5/6 → 1/1 | note:c5 ]",
-  "[ 1/1 → 4/3 | note:e5 ]",
-  "[ 4/3 → 5/3 | note:b4 ]",
-  "[ 5/3 → 11/6 | note:d5 ]",
-  "[ 11/6 → 2/1 | note:c5 ]",
-  "[ 2/1 → 7/3 | note:e5 ]",
-  "[ 7/3 → 8/3 | note:b4 ]",
-  "[ 8/3 → 17/6 | note:d5 ]",
-  "[ 17/6 → 3/1 | note:c5 ]",
-  "[ 3/1 → 10/3 | note:e5 ]",
-  "[ 10/3 → 11/3 | note:b4 ]",
-  "[ 11/3 → 23/6 | note:d5 ]",
-  "[ 23/6 → 4/1 | note:c5 ]",
+  "[ 0/1 → 1/8 | s:bd ]",
+  "[ 3/8 → 1/2 | s:bd ]",
+  "[ 3/4 → 7/8 | s:bd ]",
+  "[ 1/1 → 9/8 | s:bd ]",
+  "[ 1/1 → 9/8 | s:cp ]",
+  "[ 11/8 → 3/2 | s:bd ]",
+  "[ 11/8 → 3/2 | s:cp ]",
+  "[ 7/4 → 15/8 | s:bd ]",
+  "[ 7/4 → 15/8 | s:cp ]",
+  "[ 2/1 → 17/8 | s:cp ]",
+  "[ 19/8 → 5/2 | s:cp ]",
+  "[ 11/4 → 23/8 | s:cp ]",
+  "[ 3/1 → 25/8 | s:bd ]",
+  "[ 27/8 → 7/2 | s:bd ]",
+  "[ 15/4 → 31/8 | s:bd ]",
 ]
 `;
 
@@ -6618,6 +7131,56 @@ exports[`runs examples > example "shape" example index 0 1`] = `
 ]
 `;
 
+exports[`runs examples > example "shuffle
+Slices a pattern into the given number of parts, then plays those parts in random order.
+Each part will be played exactly once per cycle." example index 0 1`] = `
+[
+  "[ 0/1 → 1/4 | note:c s:piano ]",
+  "[ 1/4 → 1/2 | note:d s:piano ]",
+  "[ 1/2 → 3/4 | note:e s:piano ]",
+  "[ 3/4 → 1/1 | note:f s:piano ]",
+  "[ 1/1 → 5/4 | note:c s:piano ]",
+  "[ 5/4 → 3/2 | note:d s:piano ]",
+  "[ 3/2 → 7/4 | note:e s:piano ]",
+  "[ 7/4 → 2/1 | note:f s:piano ]",
+  "[ 2/1 → 9/4 | note:c s:piano ]",
+  "[ 9/4 → 5/2 | note:d s:piano ]",
+  "[ 5/2 → 11/4 | note:e s:piano ]",
+  "[ 11/4 → 3/1 | note:f s:piano ]",
+  "[ 3/1 → 13/4 | note:c s:piano ]",
+  "[ 13/4 → 7/2 | note:d s:piano ]",
+  "[ 7/2 → 15/4 | note:e s:piano ]",
+  "[ 15/4 → 4/1 | note:f s:piano ]",
+]
+`;
+
+exports[`runs examples > example "shuffle
+Slices a pattern into the given number of parts, then plays those parts in random order.
+Each part will be played exactly once per cycle." example index 1 1`] = `
+[
+  "[ 0/1 → 1/8 | note:c s:piano ]",
+  "[ 1/8 → 1/4 | note:d s:piano ]",
+  "[ 1/4 → 3/8 | note:e s:piano ]",
+  "[ 3/8 → 1/2 | note:f s:piano ]",
+  "[ 1/2 → 1/1 | note:g s:piano ]",
+  "[ 1/1 → 9/8 | note:c s:piano ]",
+  "[ 9/8 → 5/4 | note:d s:piano ]",
+  "[ 5/4 → 11/8 | note:e s:piano ]",
+  "[ 11/8 → 3/2 | note:f s:piano ]",
+  "[ 3/2 → 2/1 | note:g s:piano ]",
+  "[ 2/1 → 17/8 | note:c s:piano ]",
+  "[ 17/8 → 9/4 | note:d s:piano ]",
+  "[ 9/4 → 19/8 | note:e s:piano ]",
+  "[ 19/8 → 5/2 | note:f s:piano ]",
+  "[ 5/2 → 3/1 | note:g s:piano ]",
+  "[ 3/1 → 25/8 | note:c s:piano ]",
+  "[ 25/8 → 13/4 | note:d s:piano ]",
+  "[ 13/4 → 27/8 | note:e s:piano ]",
+  "[ 27/8 → 7/2 | note:f s:piano ]",
+  "[ 7/2 → 4/1 | note:g s:piano ]",
+]
+`;
+
 exports[`runs examples > example "silence" example index 0 1`] = `[]`;
 
 exports[`runs examples > example "sine" example index 0 1`] = `
@@ -6945,6 +7508,75 @@ exports[`runs examples > example "sometimesBy" example index 0 1`] = `
 ]
 `;
 
+exports[`runs examples > example "spectrum" example index 0 1`] = `
+[
+  "[ -5/24 ⇜ (0/1 → 1/8) | note:F4 s:sine decay:0.3 room:0.5 ]",
+  "[ -2/15 ⇜ (0/1 → 1/5) | note:A4 s:sine decay:0.3 room:0.5 ]",
+  "[ -1/120 ⇜ (0/1 → 1/5) ⇝ 13/40 | note:A5 s:sine decay:0.3 room:0.5 ]",
+  "[ 0/1 → 1/3 | note:D3 s:sine decay:0.3 room:0.5 ]",
+  "[ 1/8 → 11/24 | note:D4 s:sine decay:0.3 room:0.5 ]",
+  "[ -1/120 ⇜ (1/5 → 13/40) | note:A5 s:sine decay:0.3 room:0.5 ]",
+  "[ 1/5 → 8/15 | note:G4 s:sine decay:0.3 room:0.5 ]",
+  "[ 13/40 → 79/120 | note:G5 s:sine decay:0.3 room:0.5 ]",
+  "[ 1/3 → 2/3 | note:C4 s:sine decay:0.3 room:0.5 ]",
+  "[ 11/24 → 19/24 | note:C5 s:sine decay:0.3 room:0.5 ]",
+  "[ 8/15 → 13/15 | note:F5 s:sine decay:0.3 room:0.5 ]",
+  "[ 79/120 → 119/120 | note:F6 s:sine decay:0.3 room:0.5 ]",
+  "[ 2/3 → 1/1 | note:G3 s:sine decay:0.3 room:0.5 ]",
+  "[ (19/24 → 1/1) ⇝ 9/8 | note:G4 s:sine decay:0.3 room:0.5 ]",
+  "[ (13/15 → 1/1) ⇝ 6/5 | note:C5 s:sine decay:0.3 room:0.5 ]",
+  "[ (119/120 → 1/1) ⇝ 53/40 | note:C6 s:sine decay:0.3 room:0.5 ]",
+  "[ 19/24 ⇜ (1/1 → 9/8) | note:G4 s:sine decay:0.3 room:0.5 ]",
+  "[ 13/15 ⇜ (1/1 → 6/5) | note:C5 s:sine decay:0.3 room:0.5 ]",
+  "[ 119/120 ⇜ (1/1 → 6/5) ⇝ 53/40 | note:C6 s:sine decay:0.3 room:0.5 ]",
+  "[ 1/1 → 4/3 | note:F3 s:sine decay:0.3 room:0.5 ]",
+  "[ 9/8 → 35/24 | note:F4 s:sine decay:0.3 room:0.5 ]",
+  "[ 119/120 ⇜ (6/5 → 53/40) | note:C6 s:sine decay:0.3 room:0.5 ]",
+  "[ 6/5 → 23/15 | note:A4 s:sine decay:0.3 room:0.5 ]",
+  "[ 53/40 → 199/120 | note:A5 s:sine decay:0.3 room:0.5 ]",
+  "[ 4/3 → 5/3 | note:D3 s:sine decay:0.3 room:0.5 ]",
+  "[ 35/24 → 43/24 | note:D4 s:sine decay:0.3 room:0.5 ]",
+  "[ 23/15 → 28/15 | note:G4 s:sine decay:0.3 room:0.5 ]",
+  "[ 199/120 → 239/120 | note:G5 s:sine decay:0.3 room:0.5 ]",
+  "[ 5/3 → 2/1 | note:C4 s:sine decay:0.3 room:0.5 ]",
+  "[ (43/24 → 2/1) ⇝ 17/8 | note:C5 s:sine decay:0.3 room:0.5 ]",
+  "[ (28/15 → 2/1) ⇝ 11/5 | note:F5 s:sine decay:0.3 room:0.5 ]",
+  "[ (239/120 → 2/1) ⇝ 93/40 | note:F6 s:sine decay:0.3 room:0.5 ]",
+  "[ 43/24 ⇜ (2/1 → 17/8) | note:C5 s:sine decay:0.3 room:0.5 ]",
+  "[ 28/15 ⇜ (2/1 → 11/5) | note:F5 s:sine decay:0.3 room:0.5 ]",
+  "[ 239/120 ⇜ (2/1 → 11/5) ⇝ 93/40 | note:F6 s:sine decay:0.3 room:0.5 ]",
+  "[ 2/1 → 7/3 | note:A3 s:sine decay:0.3 room:0.5 ]",
+  "[ 17/8 → 59/24 | note:A4 s:sine decay:0.3 room:0.5 ]",
+  "[ 239/120 ⇜ (11/5 → 93/40) | note:F6 s:sine decay:0.3 room:0.5 ]",
+  "[ 11/5 → 38/15 | note:D5 s:sine decay:0.3 room:0.5 ]",
+  "[ 93/40 → 319/120 | note:D6 s:sine decay:0.3 room:0.5 ]",
+  "[ 7/3 → 8/3 | note:F3 s:sine decay:0.3 room:0.5 ]",
+  "[ 59/24 → 67/24 | note:F4 s:sine decay:0.3 room:0.5 ]",
+  "[ 38/15 → 43/15 | note:A4 s:sine decay:0.3 room:0.5 ]",
+  "[ 319/120 → 359/120 | note:A5 s:sine decay:0.3 room:0.5 ]",
+  "[ 8/3 → 3/1 | note:D3 s:sine decay:0.3 room:0.5 ]",
+  "[ (67/24 → 3/1) ⇝ 25/8 | note:D4 s:sine decay:0.3 room:0.5 ]",
+  "[ (43/15 → 3/1) ⇝ 16/5 | note:G4 s:sine decay:0.3 room:0.5 ]",
+  "[ (359/120 → 3/1) ⇝ 133/40 | note:G5 s:sine decay:0.3 room:0.5 ]",
+  "[ 67/24 ⇜ (3/1 → 25/8) | note:D4 s:sine decay:0.3 room:0.5 ]",
+  "[ 43/15 ⇜ (3/1 → 16/5) | note:G4 s:sine decay:0.3 room:0.5 ]",
+  "[ 359/120 ⇜ (3/1 → 16/5) ⇝ 133/40 | note:G5 s:sine decay:0.3 room:0.5 ]",
+  "[ 3/1 → 10/3 | note:C4 s:sine decay:0.3 room:0.5 ]",
+  "[ 25/8 → 83/24 | note:C5 s:sine decay:0.3 room:0.5 ]",
+  "[ 359/120 ⇜ (16/5 → 133/40) | note:G5 s:sine decay:0.3 room:0.5 ]",
+  "[ 16/5 → 53/15 | note:F5 s:sine decay:0.3 room:0.5 ]",
+  "[ 133/40 → 439/120 | note:F6 s:sine decay:0.3 room:0.5 ]",
+  "[ 10/3 → 11/3 | note:G3 s:sine decay:0.3 room:0.5 ]",
+  "[ 83/24 → 91/24 | note:G4 s:sine decay:0.3 room:0.5 ]",
+  "[ 53/15 → 58/15 | note:C5 s:sine decay:0.3 room:0.5 ]",
+  "[ 439/120 → 479/120 | note:C6 s:sine decay:0.3 room:0.5 ]",
+  "[ 11/3 → 4/1 | note:F3 s:sine decay:0.3 room:0.5 ]",
+  "[ (91/24 → 4/1) ⇝ 33/8 | note:F4 s:sine decay:0.3 room:0.5 ]",
+  "[ (58/15 → 4/1) ⇝ 21/5 | note:A4 s:sine decay:0.3 room:0.5 ]",
+  "[ (479/120 → 4/1) ⇝ 173/40 | note:A5 s:sine decay:0.3 room:0.5 ]",
+]
+`;
+
 exports[`runs examples > example "speed" example index 0 1`] = `
 [
   "[ 0/1 → 1/6 | s:bd speed:1 ]",
@@ -6999,6 +7631,39 @@ exports[`runs examples > example "speed" example index 1 1`] = `
 ]
 `;
 
+exports[`runs examples > example "spiral" example index 0 1`] = `
+[
+  "[ 0/1 → 1/8 | note:c2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ (1/4 → 1/3) ⇝ 3/8 | note:c2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 1/4 ⇜ (1/3 → 3/8) | note:a2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 3/8 → 1/2 | note:a2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ (5/8 → 2/3) ⇝ 3/4 | note:a2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 5/8 ⇜ (2/3 → 3/4) | note:eb2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 3/4 → 7/8 | note:eb2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 1/1 → 9/8 | note:c2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ (5/4 → 4/3) ⇝ 11/8 | note:c2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 5/4 ⇜ (4/3 → 11/8) | note:a2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 11/8 → 3/2 | note:a2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ (13/8 → 5/3) ⇝ 7/4 | note:a2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 13/8 ⇜ (5/3 → 7/4) | note:eb2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 7/4 → 15/8 | note:eb2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 2/1 → 17/8 | note:c2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ (9/4 → 7/3) ⇝ 19/8 | note:c2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 9/4 ⇜ (7/3 → 19/8) | note:a2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 19/8 → 5/2 | note:a2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ (21/8 → 8/3) ⇝ 11/4 | note:a2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 21/8 ⇜ (8/3 → 11/4) | note:eb2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 11/4 → 23/8 | note:eb2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 3/1 → 25/8 | note:c2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ (13/4 → 10/3) ⇝ 27/8 | note:c2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 13/4 ⇜ (10/3 → 27/8) | note:a2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 27/8 → 7/2 | note:a2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ (29/8 → 11/3) ⇝ 15/4 | note:a2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 29/8 ⇜ (11/3 → 15/4) | note:eb2 s:sawtooth lpenv:4 cutoff:300 ]",
+  "[ 15/4 → 31/8 | note:eb2 s:sawtooth lpenv:4 cutoff:300 ]",
+]
+`;
+
 exports[`runs examples > example "splice" example index 0 1`] = `
 [
   "[ 0/1 → 1/8 | speed:1 unit:c begin:0 end:0.125 _slices:8 s:breaks165 ]",
@@ -7155,6 +7820,27 @@ exports[`runs examples > example "squiz" example index 0 1`] = `
 `;
 
 exports[`runs examples > example "stack" example index 0 1`] = `
+[
+  "[ 0/1 → 1/2 | note:e4 ]",
+  "[ 0/1 → 1/1 | note:g3 ]",
+  "[ 0/1 → 1/1 | note:b3 ]",
+  "[ 1/2 → 1/1 | note:d4 ]",
+  "[ 1/1 → 3/2 | note:e4 ]",
+  "[ 1/1 → 2/1 | note:g3 ]",
+  "[ 1/1 → 2/1 | note:b3 ]",
+  "[ 3/2 → 2/1 | note:d4 ]",
+  "[ 2/1 → 5/2 | note:e4 ]",
+  "[ 2/1 → 3/1 | note:g3 ]",
+  "[ 2/1 → 3/1 | note:b3 ]",
+  "[ 5/2 → 3/1 | note:d4 ]",
+  "[ 3/1 → 7/2 | note:e4 ]",
+  "[ 3/1 → 4/1 | note:g3 ]",
+  "[ 3/1 → 4/1 | note:b3 ]",
+  "[ 7/2 → 4/1 | note:d4 ]",
+]
+`;
+
+exports[`runs examples > example "stack" example index 1 1`] = `
 [
   "[ 0/1 → 1/8 | note:c4 ]",
   "[ 0/1 → 1/4 | s:hh ]",
@@ -7195,52 +7881,6 @@ exports[`runs examples > example "stack" example index 0 1`] = `
 ]
 `;
 
-exports[`runs examples > example "stack" example index 0 2`] = `
-[
-  "[ 0/1 → 1/2 | note:e4 ]",
-  "[ 0/1 → 1/1 | note:g3 ]",
-  "[ 0/1 → 1/1 | note:b3 ]",
-  "[ 1/2 → 1/1 | note:d4 ]",
-  "[ 1/1 → 3/2 | note:e4 ]",
-  "[ 1/1 → 2/1 | note:g3 ]",
-  "[ 1/1 → 2/1 | note:b3 ]",
-  "[ 3/2 → 2/1 | note:d4 ]",
-  "[ 2/1 → 5/2 | note:e4 ]",
-  "[ 2/1 → 3/1 | note:g3 ]",
-  "[ 2/1 → 3/1 | note:b3 ]",
-  "[ 5/2 → 3/1 | note:d4 ]",
-  "[ 3/1 → 7/2 | note:e4 ]",
-  "[ 3/1 → 4/1 | note:g3 ]",
-  "[ 3/1 → 4/1 | note:b3 ]",
-  "[ 7/2 → 4/1 | note:d4 ]",
-]
-`;
-
-exports[`runs examples > example "stepcat" example index 0 1`] = `
-[
-  "[ 0/1 → 1/5 | s:bd ]",
-  "[ 1/5 → 2/5 | s:cp ]",
-  "[ 2/5 → 3/5 | s:bd ]",
-  "[ 3/5 → 4/5 | s:mt ]",
-  "[ 4/5 → 1/1 | s:bd ]",
-  "[ 1/1 → 6/5 | s:bd ]",
-  "[ 6/5 → 7/5 | s:cp ]",
-  "[ 7/5 → 8/5 | s:bd ]",
-  "[ 8/5 → 9/5 | s:mt ]",
-  "[ 9/5 → 2/1 | s:bd ]",
-  "[ 2/1 → 11/5 | s:bd ]",
-  "[ 11/5 → 12/5 | s:cp ]",
-  "[ 12/5 → 13/5 | s:bd ]",
-  "[ 13/5 → 14/5 | s:mt ]",
-  "[ 14/5 → 3/1 | s:bd ]",
-  "[ 3/1 → 16/5 | s:bd ]",
-  "[ 16/5 → 17/5 | s:cp ]",
-  "[ 17/5 → 18/5 | s:bd ]",
-  "[ 18/5 → 19/5 | s:mt ]",
-  "[ 19/5 → 4/1 | s:bd ]",
-]
-`;
-
 exports[`runs examples > example "steps" example index 0 1`] = `
 [
   "[ 0/1 → 1/4 | s:bd ]",
@@ -7262,6 +7902,23 @@ exports[`runs examples > example "steps" example index 0 1`] = `
 ]
 `;
 
+exports[`runs examples > example "stretch" example index 0 1`] = `
+[
+  "[ (0/1 → 1/3) ⇝ 1/1 | s:gm_flute stretch:1 ]",
+  "[ 0/1 ⇜ (1/3 → 2/3) ⇝ 1/1 | s:gm_flute stretch:2 ]",
+  "[ 0/1 ⇜ (2/3 → 1/1) | s:gm_flute stretch:0.5 ]",
+  "[ (1/1 → 4/3) ⇝ 2/1 | s:gm_flute stretch:1 ]",
+  "[ 1/1 ⇜ (4/3 → 5/3) ⇝ 2/1 | s:gm_flute stretch:2 ]",
+  "[ 1/1 ⇜ (5/3 → 2/1) | s:gm_flute stretch:0.5 ]",
+  "[ (2/1 → 7/3) ⇝ 3/1 | s:gm_flute stretch:1 ]",
+  "[ 2/1 ⇜ (7/3 → 8/3) ⇝ 3/1 | s:gm_flute stretch:2 ]",
+  "[ 2/1 ⇜ (8/3 → 3/1) | s:gm_flute stretch:0.5 ]",
+  "[ (3/1 → 10/3) ⇝ 4/1 | s:gm_flute stretch:1 ]",
+  "[ 3/1 ⇜ (10/3 → 11/3) ⇝ 4/1 | s:gm_flute stretch:2 ]",
+  "[ 3/1 ⇜ (11/3 → 4/1) | s:gm_flute stretch:0.5 ]",
+]
+`;
+
 exports[`runs examples > example "striate" example index 0 1`] = `
 [
   "[ 0/1 → 1/6 | s:numbers n:0 begin:0 end:0.16666666666666666 ]",
@@ -7554,65 +8211,6 @@ exports[`runs examples > example "swingBy" example index 0 1`] = `
 ]
 `;
 
-exports[`runs examples > example "timecat" example index 0 1`] = `
-[
-  "[ 0/1 → 3/4 | note:e3 ]",
-  "[ 3/4 → 1/1 | note:g3 ]",
-  "[ 1/1 → 7/4 | note:e3 ]",
-  "[ 7/4 → 2/1 | note:g3 ]",
-  "[ 2/1 → 11/4 | note:e3 ]",
-  "[ 11/4 → 3/1 | note:g3 ]",
-  "[ 3/1 → 15/4 | note:e3 ]",
-  "[ 15/4 → 4/1 | note:g3 ]",
-]
-`;
-
-exports[`runs examples > example "timecat" example index 1 1`] = `
-[
-  "[ 0/1 → 1/5 | s:bd ]",
-  "[ 1/5 → 2/5 | s:sd ]",
-  "[ 2/5 → 3/5 | s:cp ]",
-  "[ 3/5 → 4/5 | s:hh ]",
-  "[ 4/5 → 1/1 | s:hh ]",
-  "[ 1/1 → 6/5 | s:bd ]",
-  "[ 6/5 → 7/5 | s:sd ]",
-  "[ 7/5 → 8/5 | s:cp ]",
-  "[ 8/5 → 9/5 | s:hh ]",
-  "[ 9/5 → 2/1 | s:hh ]",
-  "[ 2/1 → 11/5 | s:bd ]",
-  "[ 11/5 → 12/5 | s:sd ]",
-  "[ 12/5 → 13/5 | s:cp ]",
-  "[ 13/5 → 14/5 | s:hh ]",
-  "[ 14/5 → 3/1 | s:hh ]",
-  "[ 3/1 → 16/5 | s:bd ]",
-  "[ 16/5 → 17/5 | s:sd ]",
-  "[ 17/5 → 18/5 | s:cp ]",
-  "[ 18/5 → 19/5 | s:hh ]",
-  "[ 19/5 → 4/1 | s:hh ]",
-]
-`;
-
-exports[`runs examples > example "toTactus" example index 0 1`] = `
-[
-  "[ 0/1 → 1/4 | s:bd ]",
-  "[ 1/4 → 1/2 | s:sd ]",
-  "[ 1/2 → 3/4 | s:cp ]",
-  "[ 3/4 → 1/1 | s:bd ]",
-  "[ 1/1 → 5/4 | s:sd ]",
-  "[ 5/4 → 3/2 | s:cp ]",
-  "[ 3/2 → 7/4 | s:bd ]",
-  "[ 7/4 → 2/1 | s:sd ]",
-  "[ 2/1 → 9/4 | s:cp ]",
-  "[ 9/4 → 5/2 | s:bd ]",
-  "[ 5/2 → 11/4 | s:sd ]",
-  "[ 11/4 → 3/1 | s:cp ]",
-  "[ 3/1 → 13/4 | s:bd ]",
-  "[ 13/4 → 7/2 | s:sd ]",
-  "[ 7/2 → 15/4 | s:cp ]",
-  "[ 15/4 → 4/1 | s:bd ]",
-]
-`;
-
 exports[`runs examples > example "transpose" example index 0 1`] = `
 [
   "[ 0/1 → 1/4 | note:C2 ]",
diff --git a/test/__snapshots__/shared.test.mjs.snap b/test/__snapshots__/shared.test.mjs.snap
deleted file mode 100644
index 383bcded..00000000
--- a/test/__snapshots__/shared.test.mjs.snap
+++ /dev/null
@@ -1,6928 +0,0 @@
-// Vitest Snapshot v1
-
-exports[`renders shared tunes > shared tune 10 https://strudel.cc/?nLsPXvEPTcQF 1`] = `
-[
-  "0/1 -> 3/2: {\\"s\\":\\"bd\\",\\"speed\\":0.7519542165100574}",
-  "3/4 -> 3/2: {\\"s\\":\\"sd\\",\\"speed\\":0.7931522866332671}",
-  "3/8 -> 3/4: {\\"s\\":\\"hh\\",\\"speed\\":0.7285963821098448}",
-  "3/4 -> 9/8: {\\"s\\":\\"hh\\",\\"speed\\":0.77531205091027}",
-  "0/1 -> 3/2: {\\"n\\":33.129885541275144,\\"decay\\":0.15,\\"sustain\\":0,\\"s\\":\\"sawtooth\\",\\"gain\\":0.4,\\"cutoff\\":3669.6267869262615}",
-  "0/1 -> 3/2: {\\"n\\":33.17988554127514,\\"decay\\":0.15,\\"sustain\\":0,\\"s\\":\\"sawtooth\\",\\"gain\\":0.4,\\"cutoff\\":3669.6267869262615}",
-  "0/1 -> 3/2: {\\"n\\":55.129885541275144,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":59.129885541275144,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":60.129885541275144,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":64.12988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":55.16988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":59.16988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":60.16988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":64.16988554127515,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "3/16 -> 3/8: {\\"n\\":69.01266877519555,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/8 -> 9/16: {\\"n\\":69.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/8 -> 9/16: {\\"n\\":72.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/4 -> 15/16: {\\"n\\":72.16001184806132,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "15/16 -> 9/8: {\\"n\\":72.21301072199333,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/16 -> 3/8: {\\"n\\":69.05266877519557,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/8 -> 9/16: {\\"n\\":69.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/8 -> 9/16: {\\"n\\":72.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/4 -> 15/16: {\\"n\\":72.20001184806131,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "15/16 -> 9/8: {\\"n\\":72.25301072199335,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "0/1 -> 3/16: {\\"n\\":93.00057728554401,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "0/1 -> 3/16: {\\"n\\":93.04057728554402,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "3/8 -> 9/16: {\\"n\\":69.01266877519555,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "9/16 -> 3/4: {\\"n\\":69.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "9/16 -> 3/4: {\\"n\\":72.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "15/16 -> 9/8: {\\"n\\":72.16001184806132,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "3/8 -> 9/16: {\\"n\\":69.05266877519557,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "9/16 -> 3/4: {\\"n\\":69.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "9/16 -> 3/4: {\\"n\\":72.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "15/16 -> 9/8: {\\"n\\":72.20001184806131,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "3/16 -> 3/8: {\\"n\\":93.00057728554401,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "3/16 -> 3/8: {\\"n\\":93.04057728554402,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "9/16 -> 3/4: {\\"n\\":69.01266877519555,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "3/4 -> 15/16: {\\"n\\":69.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "3/4 -> 15/16: {\\"n\\":72.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "9/16 -> 3/4: {\\"n\\":69.05266877519557,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "3/4 -> 15/16: {\\"n\\":69.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "3/4 -> 15/16: {\\"n\\":72.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "0/1 -> 3/16: {\\"n\\":72.0468455057745,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "0/1 -> 3/16: {\\"n\\":93.0468455057745,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "3/8 -> 9/16: {\\"n\\":93.00057728554401,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "0/1 -> 3/16: {\\"n\\":72.0868455057745,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "0/1 -> 3/16: {\\"n\\":93.0868455057745,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "3/8 -> 9/16: {\\"n\\":93.04057728554402,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "3/4 -> 15/16: {\\"n\\":69.01266877519555,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "15/16 -> 9/8: {\\"n\\":69.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "3/4 -> 15/16: {\\"n\\":69.05266877519557,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "15/16 -> 9/8: {\\"n\\":69.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 11 https://strudel.cc/?ac7iGrXwBA_D 1`] = `
-[
-  "0/1 -> 3/2: {\\"s\\":\\"bd\\",\\"speed\\":0.7519542165100574}",
-  "3/4 -> 3/2: {\\"s\\":\\"sd\\",\\"speed\\":0.7931522866332671}",
-  "3/8 -> 3/4: {\\"s\\":\\"hh\\",\\"speed\\":0.7285963821098448}",
-  "3/4 -> 9/8: {\\"s\\":\\"hh\\",\\"speed\\":0.77531205091027}",
-  "0/1 -> 3/2: {\\"n\\":33.129885541275144,\\"decay\\":0.15,\\"sustain\\":0,\\"s\\":\\"sawtooth\\",\\"gain\\":0.4,\\"cutoff\\":3669.6267869262615}",
-  "0/1 -> 3/2: {\\"n\\":33.17988554127514,\\"decay\\":0.15,\\"sustain\\":0,\\"s\\":\\"sawtooth\\",\\"gain\\":0.4,\\"cutoff\\":3669.6267869262615}",
-  "0/1 -> 3/2: {\\"n\\":55.129885541275144,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":59.129885541275144,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":60.129885541275144,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":64.12988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":55.16988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":59.16988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":60.16988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":64.16988554127515,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "3/16 -> 3/8: {\\"n\\":69.01266877519555,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/8 -> 9/16: {\\"n\\":69.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/8 -> 9/16: {\\"n\\":72.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/4 -> 15/16: {\\"n\\":72.16001184806132,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "15/16 -> 9/8: {\\"n\\":72.21301072199333,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/16 -> 3/8: {\\"n\\":69.05266877519557,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/8 -> 9/16: {\\"n\\":69.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/8 -> 9/16: {\\"n\\":72.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/4 -> 15/16: {\\"n\\":72.20001184806131,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "15/16 -> 9/8: {\\"n\\":72.25301072199335,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "0/1 -> 3/16: {\\"n\\":93.00057728554401,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "0/1 -> 3/16: {\\"n\\":93.04057728554402,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "3/8 -> 9/16: {\\"n\\":69.01266877519555,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "9/16 -> 3/4: {\\"n\\":69.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "9/16 -> 3/4: {\\"n\\":72.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "15/16 -> 9/8: {\\"n\\":72.16001184806132,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "3/8 -> 9/16: {\\"n\\":69.05266877519557,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "9/16 -> 3/4: {\\"n\\":69.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "9/16 -> 3/4: {\\"n\\":72.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "15/16 -> 9/8: {\\"n\\":72.20001184806131,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "3/16 -> 3/8: {\\"n\\":93.00057728554401,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "3/16 -> 3/8: {\\"n\\":93.04057728554402,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "9/16 -> 3/4: {\\"n\\":69.01266877519555,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "3/4 -> 15/16: {\\"n\\":69.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "3/4 -> 15/16: {\\"n\\":72.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "9/16 -> 3/4: {\\"n\\":69.05266877519557,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "3/4 -> 15/16: {\\"n\\":69.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "3/4 -> 15/16: {\\"n\\":72.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "0/1 -> 3/16: {\\"n\\":72.0468455057745,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "0/1 -> 3/16: {\\"n\\":93.0468455057745,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "3/8 -> 9/16: {\\"n\\":93.00057728554401,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "0/1 -> 3/16: {\\"n\\":72.0868455057745,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "0/1 -> 3/16: {\\"n\\":93.0868455057745,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "3/8 -> 9/16: {\\"n\\":93.04057728554402,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "3/4 -> 15/16: {\\"n\\":69.01266877519555,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "15/16 -> 9/8: {\\"n\\":69.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "3/4 -> 15/16: {\\"n\\":69.05266877519557,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "15/16 -> 9/8: {\\"n\\":69.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 12 https://strudel.cc/?0l5OmIwd4Xhc 1`] = `
-[
-  "0/1 -> 3/1: {\\"n\\":\\"B3\\",\\"s\\":\\"0040_FluidR3_GM_sf2_file\\",\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.7,\\"cutoff\\":1111.7252990603447,\\"gain\\":0.3}",
-  "0/1 -> 3/1: {\\"n\\":\\"D4\\",\\"s\\":\\"0040_FluidR3_GM_sf2_file\\",\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.7,\\"cutoff\\":1111.7252990603447,\\"gain\\":0.3}",
-  "0/1 -> 3/1: {\\"n\\":\\"E4\\",\\"s\\":\\"0040_FluidR3_GM_sf2_file\\",\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.7,\\"cutoff\\":1111.7252990603447,\\"gain\\":0.3}",
-  "0/1 -> 3/1: {\\"n\\":\\"G4\\",\\"s\\":\\"0040_FluidR3_GM_sf2_file\\",\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.7,\\"cutoff\\":1111.7252990603447,\\"gain\\":0.3}",
-  "0/1 -> 9/2: {\\"n\\":\\"C5\\",\\"s\\":\\"0040_FluidR3_GM_sf2_file\\",\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.7,\\"cutoff\\":1111.7252990603447,\\"gain\\":0.3}",
-  "0/1 -> 3/4: {\\"n\\":\\"C2\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.7,\\"cutoff\\":864.536878321087,\\"gain\\":0.3}",
-  "0/1 -> 3/4: {\\"s\\":\\"bd\\",\\"speed\\":0.9107561463868479,\\"n\\":3}",
-  "3/4 -> 3/2: {\\"s\\":\\"sd\\",\\"speed\\":0.9931522866332672,\\"n\\":3}",
-  "0/1 -> 1/2: {\\"s\\":\\"hh\\",\\"speed\\":0.9036881079621337,\\"n\\":3}",
-  "1/2 -> 1/1: {\\"s\\":\\"hh\\",\\"speed\\":0.9519542165100575,\\"n\\":3}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 13 https://strudel.cc/?a5zB31-92Q7M 1`] = `
-[
-  "0/1 -> 1/1: {\\"s\\":\\"bd\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 14 https://strudel.cc/?ZNO6a_vBjz65 1`] = `
-[
-  "0/1 -> 2/3: F3",
-  "2/3 -> 1/1: Ab3",
-  "0/1 -> 2/3: Ab3",
-  "2/3 -> 1/1: C4",
-  "1/3 -> 5/12: Eb4",
-  "1/2 -> 7/12: Eb4",
-  "1/3 -> 5/12: G4",
-  "1/2 -> 7/12: G4",
-  "241/675 -> 49/75: F1",
-  "0/1 -> 2/3: c2",
-  "2/3 -> 4/3: c2",
-  "2/3 -> 4/3: c2",
-  "0/1 -> 1/3: c4",
-  "1/3 -> 2/3: c4",
-  "2/3 -> 1/1: c4",
-]
-`;
-
-exports[`renders shared tunes > shared tune 15 https://strudel.cc/?8sxdCCcYKcvp 1`] = `
-[
-  "0/1 -> 1/8: {\\"note\\":\\"A2\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2206.5338497506646,\\"resonance\\":10,\\"clip\\":1}",
-  "3/8 -> 1/2: {\\"note\\":\\"A2\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2827.098521493671,\\"resonance\\":10,\\"clip\\":1}",
-  "3/4 -> 7/8: {\\"note\\":\\"A2\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3366.0584981088073,\\"resonance\\":10,\\"clip\\":1}",
-  "0/1 -> 1/4: {\\"note\\":\\"A3\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2312.732504596285,\\"resonance\\":10,\\"clip\\":1}",
-  "3/4 -> 1/1: {\\"note\\":\\"A3\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3443.5028842544402,\\"resonance\\":10,\\"clip\\":1}",
-  "-7/4 -> 1/4: {\\"note\\":\\"C4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2312.732504596285,\\"resonance\\":10,\\"clip\\":1}",
-  "-7/4 -> 1/4: {\\"note\\":\\"E4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2312.732504596285,\\"resonance\\":10,\\"clip\\":1}",
-  "1/4 -> 1/2: {\\"note\\":\\"C4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "1/4 -> 1/2: {\\"note\\":\\"E4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/2 -> 1/2: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2522.789774516997,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/2 -> 1/2: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2522.789774516997,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/2 -> 1/2: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2522.789774516997,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/2 -> 1/2: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2522.789774516997,\\"resonance\\":10,\\"clip\\":1}",
-  "1/2 -> 3/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3110.8609453791396,\\"resonance\\":10,\\"clip\\":1}",
-  "1/2 -> 3/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3110.8609453791396,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "3/4 -> 1/1: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3443.5028842544402,\\"resonance\\":10,\\"clip\\":1}",
-  "3/4 -> 1/1: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3443.5028842544402,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/4 -> 5/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/4 -> 5/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/4 -> 5/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/4 -> 5/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 16 https://strudel.cc/?PIG8q54uhQ5h 1`] = `
-[
-  "0/1 -> 3/1: {\\"n\\":\\"B3\\",\\"s\\":\\"0040_FluidR3_GM_sf2_file\\",\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.7,\\"cutoff\\":1111.7252990603447,\\"gain\\":0.3}",
-  "0/1 -> 3/1: {\\"n\\":\\"D4\\",\\"s\\":\\"0040_FluidR3_GM_sf2_file\\",\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.7,\\"cutoff\\":1111.7252990603447,\\"gain\\":0.3}",
-  "0/1 -> 3/1: {\\"n\\":\\"E4\\",\\"s\\":\\"0040_FluidR3_GM_sf2_file\\",\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.7,\\"cutoff\\":1111.7252990603447,\\"gain\\":0.3}",
-  "0/1 -> 3/1: {\\"n\\":\\"G4\\",\\"s\\":\\"0040_FluidR3_GM_sf2_file\\",\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.7,\\"cutoff\\":1111.7252990603447,\\"gain\\":0.3}",
-  "0/1 -> 9/2: {\\"n\\":\\"C5\\",\\"s\\":\\"0040_FluidR3_GM_sf2_file\\",\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.7,\\"cutoff\\":1111.7252990603447,\\"gain\\":0.3}",
-  "0/1 -> 3/4: {\\"n\\":\\"C2\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.7,\\"cutoff\\":864.536878321087,\\"gain\\":0.3}",
-  "0/1 -> 3/4: {\\"s\\":\\"bd\\",\\"speed\\":0.9107561463868479,\\"n\\":3}",
-  "3/4 -> 3/2: {\\"s\\":\\"sd\\",\\"speed\\":0.9931522866332672,\\"n\\":3}",
-  "0/1 -> 1/2: {\\"s\\":\\"hh\\",\\"speed\\":0.9036881079621337,\\"n\\":3}",
-  "1/2 -> 1/1: {\\"s\\":\\"hh\\",\\"speed\\":0.9519542165100575,\\"n\\":3}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 18 https://strudel.cc/?RyZi9bqqcQku 1`] = `
-[
-  "0/1 -> 4/3: B4",
-  "0/1 -> 1/3: C3",
-  "1/3 -> 2/3: G3",
-  "2/3 -> 2/1: E4",
-]
-`;
-
-exports[`renders shared tunes > shared tune 19 https://strudel.cc/?83h9X6BCipLc 1`] = `
-[
-  "0/1 -> 3/4: F4",
-  "0/1 -> 3/4: Bb4",
-  "0/1 -> 3/4: D5",
-  "3/4 -> 5/4: D4",
-  "3/4 -> 5/4: G4",
-  "3/4 -> 5/4: Bb4",
-  "0/1 -> 3/4: G3",
-  "3/4 -> 3/2: G3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 20 https://strudel.cc/?Ii6-cLJkxdw9 1`] = `
-[
-  "0/1 -> 1/10: C3",
-  "0/1 -> 1/10: E3",
-  "0/1 -> 1/10: G3",
-  "1/4 -> 7/20: B3",
-  "1/4 -> 7/20: E4",
-  "1/4 -> 7/20: E3",
-  "1/2 -> 3/5: C3",
-  "1/2 -> 3/5: A2",
-  "1/2 -> 3/5: C3",
-  "3/4 -> 17/20: E3",
-  "3/4 -> 17/20: G3",
-  "3/4 -> 17/20: B3",
-  "0/1 -> 1/5: C2",
-  "1/2 -> 7/10: E2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 21 https://strudel.cc/?-QCLFGNo4Q3J 1`] = `
-[
-  "0/1 -> 1/4: {\\"n\\":62,\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000}",
-  "1/2 -> 5/8: {\\"n\\":50,\\"s\\":\\"square\\",\\"cutoff\\":2000}",
-  "3/4 -> 7/8: {\\"n\\":41,\\"s\\":\\"square\\",\\"cutoff\\":2000}",
-  "1/4 -> 1/2: {\\"n\\":74,\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000}",
-  "3/4 -> 7/8: {\\"n\\":62,\\"s\\":\\"square\\",\\"cutoff\\":2000}",
-  "0/1 -> 1/4: {\\"n\\":43,\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000}",
-  "1/2 -> 3/4: {\\"n\\":69,\\"s\\":\\"square\\",\\"cutoff\\":2000}",
-  "1/4 -> 1/2: {\\"n\\":55,\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000}",
-  "3/4 -> 1/1: {\\"n\\":81,\\"s\\":\\"square\\",\\"cutoff\\":2000}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 22 https://strudel.cc/?vwau_1P_anLs 1`] = `
-[
-  "1/8 -> 1/4: {\\"n\\":\\"D1\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1699.6897509708342}",
-  "1/8 -> 1/4: {\\"n\\":\\"D1\\",\\"s\\":\\"square\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1699.6897509708342}",
-  "3/8 -> 1/2: {\\"n\\":\\"D2\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1765.826371664994}",
-  "3/8 -> 1/2: {\\"n\\":\\"D2\\",\\"s\\":\\"square\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1765.826371664994}",
-  "1/2 -> 5/8: {\\"n\\":\\"D1\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1798.799979846742}",
-  "1/2 -> 5/8: {\\"n\\":\\"D1\\",\\"s\\":\\"square\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1798.799979846742}",
-  "3/4 -> 7/8: {\\"n\\":\\"D3\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1864.4584935007128}",
-  "3/4 -> 7/8: {\\"n\\":\\"D3\\",\\"s\\":\\"square\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1864.4584935007128}",
-  "7/8 -> 1/1: {\\"n\\":\\"D3\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1897.1038487394403}",
-  "7/8 -> 1/1: {\\"n\\":\\"D3\\",\\"s\\":\\"square\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1897.1038487394403}",
-  "-3/8 -> 1/8: {\\"n\\":\\"G3\\",\\"s\\":\\"square\\",\\"gain\\":0.7,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0,\\"cutoff\\":1666.5665766857219}",
-  "-3/8 -> 1/8: {\\"n\\":\\"B3\\",\\"s\\":\\"square\\",\\"gain\\":0.7,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0,\\"cutoff\\":1666.5665766857219}",
-  "-1/4 -> 1/4: {\\"n\\":\\"G3\\",\\"s\\":\\"square\\",\\"gain\\":0.7,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0,\\"cutoff\\":1683.1306585059317}",
-  "-1/4 -> 1/4: {\\"n\\":\\"B3\\",\\"s\\":\\"square\\",\\"gain\\":0.7,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0,\\"cutoff\\":1683.1306585059317}",
-  "-1/8 -> 3/8: {\\"n\\":\\"G3\\",\\"s\\":\\"square\\",\\"gain\\":0.7,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0,\\"cutoff\\":1699.6897509708342}",
-  "-1/8 -> 3/8: {\\"n\\":\\"B3\\",\\"s\\":\\"square\\",\\"gain\\":0.7,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0,\\"cutoff\\":1699.6897509708342}",
-  "0/1 -> 3/8: {\\"n\\":\\"C#6\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.26103468453995016,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5998.072590601808,\\"cutoff\\":4000}",
-  "0/1 -> 3/8: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.26103468453995016,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5998.072590601808,\\"cutoff\\":4000}",
-  "0/1 -> 3/8: {\\"n\\":\\"E5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.26103468453995016,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5998.072590601808,\\"cutoff\\":4000}",
-  "0/1 -> 3/8: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.26103468453995016,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5998.072590601808,\\"cutoff\\":4000}",
-  "3/8 -> 3/4: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2828651860235305,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5982.671142387316,\\"cutoff\\":4000}",
-  "3/8 -> 3/4: {\\"n\\":\\"F#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2828651860235305,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5982.671142387316,\\"cutoff\\":4000}",
-  "3/8 -> 3/4: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2828651860235305,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5982.671142387316,\\"cutoff\\":4000}",
-  "3/8 -> 3/4: {\\"n\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2828651860235305,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5982.671142387316,\\"cutoff\\":4000}",
-  "3/4 -> 1/1: {\\"n\\":\\"F#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.300533478008833,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5958.137268909887,\\"cutoff\\":4000}",
-  "3/4 -> 1/1: {\\"n\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.300533478008833,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5958.137268909887,\\"cutoff\\":4000}",
-  "1/4 -> 5/8: {\\"n\\":\\"C#6\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2756442833140452,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5989.512318936654,\\"cutoff\\":4000}",
-  "1/4 -> 5/8: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2756442833140452,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5989.512318936654,\\"cutoff\\":4000}",
-  "1/4 -> 5/8: {\\"n\\":\\"E5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2756442833140452,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5989.512318936654,\\"cutoff\\":4000}",
-  "1/4 -> 5/8: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2756442833140452,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5989.512318936654,\\"cutoff\\":4000}",
-  "5/8 -> 1/1: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.29705226105983373,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5963.890147645195,\\"cutoff\\":4000}",
-  "5/8 -> 1/1: {\\"n\\":\\"F#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.29705226105983373,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5963.890147645195,\\"cutoff\\":4000}",
-  "5/8 -> 1/1: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.29705226105983373,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5963.890147645195,\\"cutoff\\":4000}",
-  "5/8 -> 1/1: {\\"n\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.29705226105983373,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5963.890147645195,\\"cutoff\\":4000}",
-  "1/2 -> 7/8: {\\"n\\":\\"C#6\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.29000691362123476,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5974.128467049176,\\"cutoff\\":4000}",
-  "1/2 -> 7/8: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.29000691362123476,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5974.128467049176,\\"cutoff\\":4000}",
-  "1/2 -> 7/8: {\\"n\\":\\"E5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.29000691362123476,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5974.128467049176,\\"cutoff\\":4000}",
-  "1/2 -> 7/8: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.29000691362123476,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5974.128467049176,\\"cutoff\\":4000}",
-  "7/8 -> 5/4: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.3107861971007485,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5938.355801271282,\\"cutoff\\":4000}",
-  "7/8 -> 5/4: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.3107861971007485,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5938.355801271282,\\"cutoff\\":4000}",
-  "3/4 -> 9/8: {\\"n\\":\\"C#6\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.30398425548024827,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5951.963201008076,\\"cutoff\\":4000}",
-  "3/4 -> 9/8: {\\"n\\":\\"E5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.30398425548024827,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5951.963201008076,\\"cutoff\\":4000}",
-  "0/1 -> 1/4: {\\"n\\":\\"F#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2573601511491127,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.143312438893,\\"cutoff\\":4000}",
-  "0/1 -> 1/4: {\\"n\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2573601511491127,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.143312438893,\\"cutoff\\":4000}",
-  "-1/8 -> 1/4: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2573601511491127,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.143312438893,\\"cutoff\\":4000}",
-  "-1/8 -> 1/4: {\\"n\\":\\"F#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2573601511491127,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.143312438893,\\"cutoff\\":4000}",
-  "-1/8 -> 1/4: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2573601511491127,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.143312438893,\\"cutoff\\":4000}",
-  "-1/8 -> 1/4: {\\"n\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2573601511491127,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.143312438893,\\"cutoff\\":4000}",
-  "1/4 -> 1/2: {\\"n\\":\\"F#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.27200957116830426,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5992.29333433282,\\"cutoff\\":4000}",
-  "1/4 -> 1/2: {\\"n\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.27200957116830426,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5992.29333433282,\\"cutoff\\":4000}",
-  "-1/4 -> 1/8: {\\"n\\":\\"C#6\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2536811842784369,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.785818935017,\\"cutoff\\":4000}",
-  "-1/4 -> 1/8: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2536811842784369,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.785818935017,\\"cutoff\\":4000}",
-  "-1/4 -> 1/8: {\\"n\\":\\"E5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2536811842784369,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.785818935017,\\"cutoff\\":4000}",
-  "-1/4 -> 1/8: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2536811842784369,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.785818935017,\\"cutoff\\":4000}",
-  "1/8 -> 1/2: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.26836160127988246,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5994.647308096509,\\"cutoff\\":4000}",
-  "1/8 -> 1/2: {\\"n\\":\\"F#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.26836160127988246,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5994.647308096509,\\"cutoff\\":4000}",
-  "1/8 -> 1/2: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.26836160127988246,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5994.647308096509,\\"cutoff\\":4000}",
-  "1/8 -> 1/2: {\\"n\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.26836160127988246,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5994.647308096509,\\"cutoff\\":4000}",
-  "1/2 -> 3/4: {\\"n\\":\\"F#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.28644702698548963,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5978.612153434527,\\"cutoff\\":4000}",
-  "1/2 -> 3/4: {\\"n\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.28644702698548963,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5978.612153434527,\\"cutoff\\":4000}",
-  "0/1 -> 1/4: bd",
-  "1/2 -> 3/4: bd",
-  "1/2 -> 1/1: sn",
-  "1/4 -> 1/2: hh3",
-  "3/4 -> 1/1: hh3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 23 https://strudel.cc/?wVExAEFBUPQB 1`] = `
-[
-  "0/1 -> 1/4: {\\"note\\":\\"F3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.49537037037037035}",
-  "0/1 -> 1/4: {\\"note\\":\\"A3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5138888888888888}",
-  "0/1 -> 1/4: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "0/1 -> 1/4: {\\"note\\":\\"E4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5462962962962963}",
-  "3/4 -> 1/1: {\\"note\\":\\"F3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.49537037037037035}",
-  "3/4 -> 1/1: {\\"note\\":\\"A3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5138888888888888}",
-  "3/4 -> 1/1: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "3/4 -> 1/1: {\\"note\\":\\"E4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5462962962962963}",
-  "0/1 -> 19/20: {\\"note\\":\\"D2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.42592592592592593}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 24 https://strudel.cc/?C8mMgTmvsnue 1`] = `
-[
-  "0/1 -> 1/10: C3",
-  "0/1 -> 1/10: E3",
-  "0/1 -> 1/10: G3",
-  "1/4 -> 7/20: B3",
-  "1/4 -> 7/20: E4",
-  "1/4 -> 7/20: E3",
-  "1/2 -> 3/5: C3",
-  "1/2 -> 3/5: A2",
-  "1/2 -> 3/5: C3",
-  "3/4 -> 17/20: E3",
-  "3/4 -> 17/20: G3",
-  "3/4 -> 17/20: B3",
-  "0/1 -> 1/5: C2",
-  "1/2 -> 7/10: E2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 25 https://strudel.cc/?EeNsQ8hdNZwN 1`] = `
-[
-  "0/1 -> 1/10: C3",
-  "0/1 -> 1/10: E3",
-  "0/1 -> 1/10: G3",
-  "1/4 -> 7/20: B3",
-  "1/4 -> 7/20: E4",
-  "1/4 -> 7/20: E3",
-  "1/2 -> 3/5: C3",
-  "1/2 -> 3/5: A2",
-  "1/2 -> 3/5: C3",
-  "3/4 -> 17/20: E3",
-  "3/4 -> 17/20: G3",
-  "3/4 -> 17/20: B3",
-  "0/1 -> 1/5: C2",
-  "1/2 -> 7/10: E2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 26 https://strudel.cc/?AoWRw1oZkytb 1`] = `
-[
-  "0/1 -> 1/2: e5",
-  "1/2 -> 3/4: b4",
-  "3/4 -> 1/1: c5",
-  "0/1 -> 1/4: e2",
-  "1/4 -> 1/2: e3",
-  "1/2 -> 3/4: e2",
-  "3/4 -> 1/1: e3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 27 https://strudel.cc/?UaTcY5YrOahl 1`] = `
-[
-  "-1666666666666667/7500000000000000 -> 2/9: G3",
-  "0/1 -> 4/3: E3",
-  "0/1 -> 4/3: A3",
-  "0/1 -> 4/3: D4",
-  "0/1 -> 4/3: G4",
-  "0/1 -> 4/3: B4",
-  "0/1 -> 2/3: D2",
-  "2/3 -> 7/9: D2",
-  "8/9 -> 1/1: D2",
-  "0/1 -> 2/9: c1",
-  "2/9 -> 4/9: c1",
-  "4/9 -> 2/3: c1",
-  "2/3 -> 8/9: c1",
-  "8/9 -> 10/9: c1",
-  "2/3 -> 4/3: c3",
-  "0/1 -> 10/9: c1",
-  "0/1 -> 16/3: F3",
-  "0/1 -> 16/3: A3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 28 https://strudel.cc/?YPLI4xhBDMpV 1`] = `
-[
-  "0/1 -> 1/1: bd",
-  "0/1 -> 1/4: hh",
-  "1/4 -> 1/2: hh",
-  "1/2 -> 3/4: hh",
-  "3/4 -> 1/1: hh",
-  "1/2 -> 1/1: sn",
-]
-`;
-
-exports[`renders shared tunes > shared tune 29 https://strudel.cc/?amB31Tm55hnv 1`] = `
-[
-  "0/1 -> 1/4: B3",
-  "0/1 -> 1/4: D4",
-  "0/1 -> 1/4: E4",
-  "0/1 -> 1/4: G4",
-  "1/4 -> 1/2: C4",
-  "1/4 -> 1/2: E4",
-  "1/4 -> 1/2: F4",
-  "1/4 -> 1/2: A4",
-  "1/2 -> 3/4: A3",
-  "1/2 -> 3/4: C4",
-  "1/2 -> 3/4: E4",
-  "1/2 -> 3/4: G4",
-  "3/4 -> 1/1: B3",
-  "3/4 -> 1/1: E4",
-  "3/4 -> 1/1: F4",
-  "3/4 -> 1/1: A4",
-  "0/1 -> 1/2: C2",
-  "1/2 -> 1/1: D2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 30 https://strudel.cc/?8OyCVeBYuqru 1`] = `
-[
-  "0/1 -> 4/3: B4",
-  "0/1 -> 1/3: C3",
-  "1/3 -> 2/3: G3",
-  "2/3 -> 2/1: E4",
-]
-`;
-
-exports[`renders shared tunes > shared tune 31 https://strudel.cc/?lzjNrzv5qXL2 1`] = `
-[
-  "0/1 -> 1/3: bd",
-  "1/3 -> 2/3: hh",
-  "2/3 -> 1/1: sn",
-  "0/1 -> 1/20: G4",
-  "1/6 -> 13/60: G4",
-  "1/3 -> 23/60: B3",
-  "1/2 -> 11/20: B3",
-  "1/3 -> 23/60: E4",
-  "1/2 -> 11/20: E4",
-  "2/3 -> 43/60: G3",
-  "5/6 -> 53/60: G3",
-  "0/1 -> 4/3: c2",
-  "0/1 -> 4/3: c2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 32 https://strudel.cc/?b5ZZnwaI-UuT 1`] = `
-[
-  "0/1 -> 7/5: {\\"s\\":\\"bd\\",\\"speed\\":0.7779313247650861}",
-  "7/10 -> 7/5: {\\"s\\":\\"sd\\",\\"speed\\":0.8397284299499006}",
-  "0/1 -> 7/20: {\\"s\\":\\"hh\\",\\"speed\\":0.7025019456070822}",
-  "7/20 -> 7/10: {\\"s\\":\\"hh\\",\\"speed\\":0.7428945731647673}",
-  "7/10 -> 21/20: {\\"s\\":\\"hh\\",\\"speed\\":0.812968076365405}",
-  "0/1 -> 7/5: {\\"n\\":33.129885541275144,\\"decay\\":0.15,\\"sustain\\":0,\\"s\\":\\"sawtooth\\",\\"gain\\":0.4,\\"cutoff\\":3669.6267869262615}",
-  "0/1 -> 7/5: {\\"n\\":33.17988554127514,\\"decay\\":0.15,\\"sustain\\":0,\\"s\\":\\"sawtooth\\",\\"gain\\":0.4,\\"cutoff\\":3669.6267869262615}",
-  "0/1 -> 7/5: {\\"n\\":55.129885541275144,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 7/5: {\\"n\\":59.129885541275144,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 7/5: {\\"n\\":60.129885541275144,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 7/5: {\\"n\\":64.12988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 7/5: {\\"n\\":55.16988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 7/5: {\\"n\\":59.16988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 7/5: {\\"n\\":60.16988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 7/5: {\\"n\\":64.16988554127515,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "7/40 -> 7/20: {\\"n\\":69.01266877519555,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "7/20 -> 21/40: {\\"n\\":69.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "7/20 -> 21/40: {\\"n\\":72.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "7/10 -> 7/8: {\\"n\\":72.16001184806132,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "7/8 -> 21/20: {\\"n\\":72.21301072199333,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "7/8 -> 21/20: {\\"n\\":88.21301072199333,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "7/40 -> 7/20: {\\"n\\":69.05266877519557,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "7/20 -> 21/40: {\\"n\\":69.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "7/20 -> 21/40: {\\"n\\":72.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "7/10 -> 7/8: {\\"n\\":72.20001184806131,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "7/8 -> 21/20: {\\"n\\":72.25301072199335,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "7/8 -> 21/20: {\\"n\\":88.25301072199335,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "0/1 -> 7/40: {\\"n\\":93.00057728554401,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "0/1 -> 7/40: {\\"n\\":93.04057728554402,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "7/20 -> 21/40: {\\"n\\":69.01266877519555,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "21/40 -> 7/10: {\\"n\\":69.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "21/40 -> 7/10: {\\"n\\":72.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "7/8 -> 21/20: {\\"n\\":72.16001184806132,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "7/20 -> 21/40: {\\"n\\":69.05266877519557,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "21/40 -> 7/10: {\\"n\\":69.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "21/40 -> 7/10: {\\"n\\":72.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "7/8 -> 21/20: {\\"n\\":72.20001184806131,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "7/40 -> 7/20: {\\"n\\":93.00057728554401,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "7/40 -> 7/20: {\\"n\\":93.04057728554402,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "21/40 -> 7/10: {\\"n\\":69.01266877519555,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "7/10 -> 7/8: {\\"n\\":69.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "7/10 -> 7/8: {\\"n\\":72.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "21/40 -> 7/10: {\\"n\\":69.05266877519557,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "7/10 -> 7/8: {\\"n\\":69.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "7/10 -> 7/8: {\\"n\\":72.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "0/1 -> 7/40: {\\"n\\":72.0468455057745,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "0/1 -> 7/40: {\\"n\\":93.0468455057745,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "7/20 -> 21/40: {\\"n\\":93.00057728554401,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "0/1 -> 7/40: {\\"n\\":72.0868455057745,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "0/1 -> 7/40: {\\"n\\":93.0868455057745,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "7/20 -> 21/40: {\\"n\\":93.04057728554402,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "7/10 -> 7/8: {\\"n\\":69.01266877519555,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "7/8 -> 21/20: {\\"n\\":69.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "7/8 -> 21/20: {\\"n\\":72.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "7/10 -> 7/8: {\\"n\\":69.05266877519557,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "7/8 -> 21/20: {\\"n\\":69.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "7/8 -> 21/20: {\\"n\\":72.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 33 https://strudel.cc/?YZksJ_k4TsrS 1`] = `
-[
-  "0/1 -> 5/8: F#5",
-  "5/8 -> 5/4: D5",
-  "0/1 -> 5/8: A#3",
-  "0/1 -> 5/8: C#4",
-  "0/1 -> 5/8: D#4",
-  "0/1 -> 5/8: F#4",
-  "5/8 -> 5/4: F#3",
-  "5/8 -> 5/4: B3",
-  "5/8 -> 5/4: C4",
-  "5/8 -> 5/4: E4",
-  "0/1 -> 5/8: B2",
-  "5/8 -> 5/4: D2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 34 https://strudel.cc/?e9-pyQN6vY8E 1`] = `
-[
-  "0/1 -> 2/1: {\\"note\\":\\"D3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.4814814814814815}",
-  "0/1 -> 2/1: {\\"note\\":\\"D3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.4814814814814815}",
-  "0/1 -> 1/3: {\\"note\\":\\"C#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5324074074074074}",
-  "1/6 -> 1/2: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/3 -> 2/3: {\\"note\\":\\"C#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5324074074074074}",
-  "1/2 -> 5/6: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "2/3 -> 1/1: {\\"note\\":\\"C#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5324074074074074}",
-  "5/6 -> 7/6: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "5/6 -> 7/6: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "0/1 -> 2/1: {\\"note\\":\\"A3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5138888888888888}",
-  "0/1 -> 2/1: {\\"note\\":\\"A3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5138888888888888}",
-  "0/1 -> 2/1: {\\"note\\":\\"G3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5046296296296297}",
-  "0/1 -> 2/1: {\\"note\\":\\"G3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5046296296296297}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 35 https://strudel.cc/?ar2sdYnjIBLm 1`] = `
-[
-  "0/1 -> 5/8: F#5",
-  "5/8 -> 5/4: D5",
-  "0/1 -> 5/8: A#3",
-  "0/1 -> 5/8: C#4",
-  "0/1 -> 5/8: D#4",
-  "0/1 -> 5/8: F#4",
-  "5/8 -> 5/4: F#3",
-  "5/8 -> 5/4: B3",
-  "5/8 -> 5/4: C4",
-  "5/8 -> 5/4: E4",
-  "0/1 -> 5/8: B2",
-  "5/8 -> 5/4: D2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 38 https://strudel.cc/?RDyvc3SOo6kX 1`] = `[]`;
-
-exports[`renders shared tunes > shared tune 39 https://strudel.cc/?E9HzjWmePz3x 1`] = `
-[
-  "0/1 -> 1/2: c1",
-  "1/2 -> 1/1: c1",
-  "1/2 -> 1/1: x",
-  "1/4 -> 1/2: c4",
-  "3/4 -> 1/1: c4",
-  "0/1 -> 1/2: B1",
-  "3/4 -> 1/1: B1",
-  "1/4 -> 13/44: A3",
-  "1/4 -> 13/44: C#4",
-  "1/4 -> 13/44: D4",
-  "1/4 -> 13/44: F#4",
-]
-`;
-
-exports[`renders shared tunes > shared tune 40 https://strudel.cc/?qk6JW1Bmi26s 1`] = `
-[
-  "0/1 -> 1/1: {\\"n\\":\\"C2\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":500}",
-  "1/2 -> 3/5: {\\"note\\":\\"Bb3\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000,\\"gain\\":0.6}",
-  "1/2 -> 3/5: {\\"note\\":\\"D4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000,\\"gain\\":0.6}",
-  "1/2 -> 3/5: {\\"note\\":\\"Eb4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000,\\"gain\\":0.6}",
-  "1/2 -> 3/5: {\\"note\\":\\"G4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000,\\"gain\\":0.6}",
-  "-3/8 -> -11/40: {\\"note\\":\\"B3\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000,\\"gain\\":0.6}",
-  "-3/8 -> -11/40: {\\"note\\":\\"Eb4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000,\\"gain\\":0.6}",
-  "-3/8 -> -11/40: {\\"note\\":\\"F4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000,\\"gain\\":0.6}",
-  "-3/8 -> -11/40: {\\"note\\":\\"Ab4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000,\\"gain\\":0.6}",
-  "5/8 -> 29/40: {\\"note\\":\\"Bb3\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000,\\"gain\\":0.6}",
-  "5/8 -> 29/40: {\\"note\\":\\"D4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000,\\"gain\\":0.6}",
-  "5/8 -> 29/40: {\\"note\\":\\"Eb4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000,\\"gain\\":0.6}",
-  "5/8 -> 29/40: {\\"note\\":\\"G4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000,\\"gain\\":0.6}",
-  "-1/4 -> -3/20: {\\"note\\":\\"B3\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000,\\"gain\\":0.6}",
-  "-1/4 -> -3/20: {\\"note\\":\\"Eb4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000,\\"gain\\":0.6}",
-  "-1/4 -> -3/20: {\\"note\\":\\"F4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000,\\"gain\\":0.6}",
-  "-1/4 -> -3/20: {\\"note\\":\\"Ab4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000,\\"gain\\":0.6}",
-  "3/4 -> 17/20: {\\"note\\":\\"Bb3\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000,\\"gain\\":0.6}",
-  "3/4 -> 17/20: {\\"note\\":\\"D4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000,\\"gain\\":0.6}",
-  "3/4 -> 17/20: {\\"note\\":\\"Eb4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000,\\"gain\\":0.6}",
-  "3/4 -> 17/20: {\\"note\\":\\"G4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000,\\"gain\\":0.6}",
-  "-1/8 -> -1/40: {\\"note\\":\\"B3\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000,\\"gain\\":0.6}",
-  "-1/8 -> -1/40: {\\"note\\":\\"Eb4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000,\\"gain\\":0.6}",
-  "-1/8 -> -1/40: {\\"note\\":\\"F4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000,\\"gain\\":0.6}",
-  "-1/8 -> -1/40: {\\"note\\":\\"Ab4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000,\\"gain\\":0.6}",
-  "7/8 -> 39/40: {\\"note\\":\\"Bb3\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000,\\"gain\\":0.6}",
-  "7/8 -> 39/40: {\\"note\\":\\"D4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000,\\"gain\\":0.6}",
-  "7/8 -> 39/40: {\\"note\\":\\"Eb4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000,\\"gain\\":0.6}",
-  "7/8 -> 39/40: {\\"note\\":\\"G4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000,\\"gain\\":0.6}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 41 https://strudel.cc/?c59geCmbANy8 1`] = `
-[
-  "0/1 -> 1/3: C3",
-  "1/3 -> 2/3: E3",
-  "2/3 -> 1/1: G3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 42 https://strudel.cc/?WD53HbM4B3Xf 1`] = `
-[
-  "0/1 -> 1/3: C3",
-  "1/3 -> 2/3: E3",
-  "2/3 -> 1/1: G3",
-  "-1/12 -> 1/4: F6",
-  "1/4 -> 7/12: C3",
-  "7/12 -> 11/12: E3",
-  "11/12 -> 5/4: G3",
-  "-1/6 -> 1/6: C6",
-  "1/6 -> 1/2: F6",
-  "1/2 -> 5/6: C3",
-  "5/6 -> 7/6: E3",
-  "-1/4 -> 1/12: A5",
-  "1/12 -> 5/12: C6",
-  "5/12 -> 3/4: F6",
-  "3/4 -> 13/12: C3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 43 https://strudel.cc/?g7c_nZZ1fVJS 1`] = `
-[
-  "0/1 -> 1/3: C3",
-  "1/3 -> 2/3: E3",
-  "2/3 -> 1/1: G3",
-  "-1/12 -> 1/4: F6",
-  "1/4 -> 7/12: C3",
-  "7/12 -> 11/12: E3",
-  "11/12 -> 5/4: G3",
-  "-1/6 -> 1/6: C6",
-  "1/6 -> 1/2: F6",
-  "1/2 -> 5/6: C3",
-  "5/6 -> 7/6: E3",
-  "-1/4 -> 1/12: A5",
-  "1/12 -> 5/12: C6",
-  "5/12 -> 3/4: F6",
-  "3/4 -> 13/12: C3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 44 https://strudel.cc/?Don6HOPD2Wwc 1`] = `
-[
-  "0/1 -> 1/3: C3",
-  "1/3 -> 2/3: E3",
-  "2/3 -> 1/1: G3",
-  "1/20 -> 3/20: C5",
-  "3/20 -> 1/4: C5",
-  "1/20 -> 3/20: F5",
-  "3/20 -> 1/4: F5",
-  "1/20 -> 3/20: A5",
-  "3/20 -> 1/4: A5",
-  "1/20 -> 3/20: C6",
-  "3/20 -> 1/4: C6",
-  "1/20 -> 3/20: F6",
-  "3/20 -> 1/4: F6",
-  "1/4 -> 7/12: C3",
-  "7/12 -> 11/12: E3",
-  "11/12 -> 5/4: G3",
-  "3/10 -> 2/5: C5",
-  "2/5 -> 1/2: C5",
-  "3/10 -> 2/5: F5",
-  "2/5 -> 1/2: F5",
-  "3/10 -> 2/5: A5",
-  "2/5 -> 1/2: A5",
-  "3/10 -> 2/5: C6",
-  "2/5 -> 1/2: C6",
-  "3/10 -> 2/5: F6",
-  "2/5 -> 1/2: F6",
-  "1/2 -> 5/6: C3",
-  "5/6 -> 7/6: E3",
-  "11/20 -> 13/20: C5",
-  "13/20 -> 3/4: C5",
-  "11/20 -> 13/20: F5",
-  "13/20 -> 3/4: F5",
-  "11/20 -> 13/20: A5",
-  "13/20 -> 3/4: A5",
-  "11/20 -> 13/20: C6",
-  "13/20 -> 3/4: C6",
-  "11/20 -> 13/20: F6",
-  "13/20 -> 3/4: F6",
-  "3/4 -> 13/12: C3",
-  "4/5 -> 9/10: C5",
-  "9/10 -> 1/1: C5",
-  "4/5 -> 9/10: F5",
-  "9/10 -> 1/1: F5",
-  "4/5 -> 9/10: A5",
-  "9/10 -> 1/1: A5",
-  "4/5 -> 9/10: C6",
-  "9/10 -> 1/1: C6",
-  "4/5 -> 9/10: F6",
-  "9/10 -> 1/1: F6",
-  "-1/12 -> 1/4: F6",
-]
-`;
-
-exports[`renders shared tunes > shared tune 45 https://strudel.cc/?T8n8F1Fvew9g 1`] = `
-[
-  "0/1 -> 1/3: C3",
-  "1/3 -> 2/3: E3",
-  "2/3 -> 1/1: G3",
-  "0/1 -> 1/8: C5",
-  "1/8 -> 1/4: C5",
-  "0/1 -> 1/8: F5",
-  "1/8 -> 1/4: F5",
-  "0/1 -> 1/8: A5",
-  "1/8 -> 1/4: A5",
-  "0/1 -> 1/8: C6",
-  "1/8 -> 1/4: C6",
-  "0/1 -> 1/8: F6",
-  "1/8 -> 1/4: F6",
-  "1/4 -> 7/12: C3",
-  "7/12 -> 11/12: E3",
-  "11/12 -> 5/4: G3",
-  "1/4 -> 3/8: C5",
-  "3/8 -> 1/2: C5",
-  "1/4 -> 3/8: F5",
-  "3/8 -> 1/2: F5",
-  "1/4 -> 3/8: A5",
-  "3/8 -> 1/2: A5",
-  "1/4 -> 3/8: C6",
-  "3/8 -> 1/2: C6",
-  "1/4 -> 3/8: F6",
-  "3/8 -> 1/2: F6",
-  "1/2 -> 5/6: C3",
-  "5/6 -> 7/6: E3",
-  "1/2 -> 5/8: C5",
-  "5/8 -> 3/4: C5",
-  "1/2 -> 5/8: F5",
-  "5/8 -> 3/4: F5",
-  "1/2 -> 5/8: A5",
-  "5/8 -> 3/4: A5",
-  "1/2 -> 5/8: C6",
-  "5/8 -> 3/4: C6",
-  "1/2 -> 5/8: F6",
-  "5/8 -> 3/4: F6",
-  "3/4 -> 13/12: C3",
-  "3/4 -> 7/8: C5",
-  "7/8 -> 1/1: C5",
-  "3/4 -> 7/8: F5",
-  "7/8 -> 1/1: F5",
-  "3/4 -> 7/8: A5",
-  "7/8 -> 1/1: A5",
-  "3/4 -> 7/8: C6",
-  "7/8 -> 1/1: C6",
-  "3/4 -> 7/8: F6",
-  "7/8 -> 1/1: F6",
-  "-1/12 -> 1/4: F6",
-]
-`;
-
-exports[`renders shared tunes > shared tune 46 https://strudel.cc/?wj1_oPJEGjUu 1`] = `
-[
-  "1/2 -> 1/1: a4",
-  "3/4 -> 1/1: a1",
-  "1/2 -> 3/4: a2",
-  "1/4 -> 1/2: a1",
-  "0/1 -> 1/4: a2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 47 https://strudel.cc/?0KNPD8AmV-ms 1`] = `
-[
-  "0/1 -> 1/3: {\\"note\\":\\"c2\\"}",
-  "0/1 -> 1/3: {\\"note\\":\\"d2\\"}",
-  "1/3 -> 2/3: {\\"note\\":\\"d2\\"}",
-  "1/3 -> 2/3: {\\"note\\":\\"e2\\"}",
-  "2/3 -> 7/9: {\\"note\\":\\"e2\\"}",
-  "7/9 -> 8/9: {\\"note\\":\\"e2\\"}",
-  "8/9 -> 1/1: {\\"note\\":\\"e2\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 48 https://strudel.cc/?Y5DZt5A66Jj- 1`] = `
-[
-  "0/1 -> 1/1: F2",
-  "0/1 -> 1/1: F3",
-  "0/1 -> 1/1: C4",
-  "0/1 -> 1/1: Ab4",
-]
-`;
-
-exports[`renders shared tunes > shared tune 49 https://strudel.cc/?RnD3yO0e31p- 1`] = `
-[
-  "0/1 -> 1/1: F2",
-  "0/1 -> 1/1: F3",
-  "0/1 -> 1/1: C4",
-  "0/1 -> 1/1: Ab4",
-]
-`;
-
-exports[`renders shared tunes > shared tune 50 https://strudel.cc/?PQfKr5ac-4x0 1`] = `
-[
-  "0/1 -> 1/2: c1",
-  "1/2 -> 1/1: c1",
-  "1/2 -> 1/1: x",
-  "1/4 -> 1/2: c4",
-  "3/4 -> 1/1: c4",
-  "0/1 -> 1/2: B1",
-  "3/4 -> 1/1: B1",
-  "1/4 -> 13/44: A3",
-  "1/4 -> 13/44: C#4",
-  "1/4 -> 13/44: D4",
-  "1/4 -> 13/44: F#4",
-]
-`;
-
-exports[`renders shared tunes > shared tune 51 https://strudel.cc/?qbyqK2VN_6if 1`] = `
-[
-  "0/1 -> 2/1: {\\"note\\":\\"C3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.4722222222222222}",
-  "0/1 -> 2/1: {\\"note\\":\\"E3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.4907407407407407}",
-  "0/1 -> 1/1: {\\"note\\":\\"B3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5231481481481481}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 52 https://strudel.cc/?0H0ym5HypMyj 1`] = `
-[
-  "0/1 -> 1/2: {\\"note\\":\\"D3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.4814814814814815}",
-  "1/4 -> 3/4: {\\"note\\":\\"F3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.49537037037037035}",
-  "0/1 -> 1/4: {\\"note\\":\\"F4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5509259259259259}",
-  "1/2 -> 1/1: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "1/4 -> 1/2: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "3/4 -> 5/4: {\\"note\\":\\"E4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5462962962962963}",
-  "-1/8 -> 1/8: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "-1/8 -> 1/8: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "1/8 -> 5/8: {\\"note\\":\\"D3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.4814814814814815}",
-  "3/8 -> 7/8: {\\"note\\":\\"F3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.49537037037037035}",
-  "1/8 -> 3/8: {\\"note\\":\\"F4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5509259259259259}",
-  "5/8 -> 9/8: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "3/8 -> 5/8: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "7/8 -> 11/8: {\\"note\\":\\"E4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5462962962962963}",
-  "0/1 -> 1/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "0/1 -> 1/4: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "1/4 -> 3/4: {\\"note\\":\\"D3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.4814814814814815}",
-  "1/2 -> 1/1: {\\"note\\":\\"F3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.49537037037037035}",
-  "1/4 -> 1/2: {\\"note\\":\\"F4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5509259259259259}",
-  "3/4 -> 5/4: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "1/2 -> 3/4: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "-1/8 -> 1/8: {\\"note\\":\\"G3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5046296296296297}",
-  "1/8 -> 3/8: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "-1/8 -> 1/8: {\\"note\\":\\"F4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5509259259259259}",
-  "1/8 -> 3/8: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "3/8 -> 7/8: {\\"note\\":\\"D3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.4814814814814815}",
-  "5/8 -> 9/8: {\\"note\\":\\"F3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.49537037037037035}",
-  "3/8 -> 5/8: {\\"note\\":\\"F4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5509259259259259}",
-  "7/8 -> 11/8: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "5/8 -> 7/8: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 53 https://strudel.cc/?YAB9YoUpJwaj 1`] = `
-[
-  "0/1 -> 1/2: c2",
-  "1/2 -> 1/1: g2",
-  "0/1 -> 1/3: B3",
-  "0/1 -> 1/3: D4",
-  "0/1 -> 1/3: E4",
-  "0/1 -> 1/3: G4",
-  "1/3 -> 1/2: B3",
-  "1/3 -> 1/2: D4",
-  "1/3 -> 1/2: E4",
-  "1/3 -> 1/2: G4",
-  "5/6 -> 1/1: B3",
-  "5/6 -> 1/1: D4",
-  "5/6 -> 1/1: E4",
-  "5/6 -> 1/1: G4",
-]
-`;
-
-exports[`renders shared tunes > shared tune 54 https://strudel.cc/?-fdVyijf3Fk0 1`] = `
-[
-  "0/1 -> 1/2: {\\"note\\":\\"c2\\"}",
-  "1/2 -> 1/1: {\\"note\\":\\"g2\\"}",
-  "0/1 -> 1/3: {\\"note\\":\\"B3\\"}",
-  "0/1 -> 1/3: {\\"note\\":\\"D4\\"}",
-  "0/1 -> 1/3: {\\"note\\":\\"E4\\"}",
-  "0/1 -> 1/3: {\\"note\\":\\"G4\\"}",
-  "1/3 -> 1/2: {\\"note\\":\\"B3\\"}",
-  "1/3 -> 1/2: {\\"note\\":\\"D4\\"}",
-  "1/3 -> 1/2: {\\"note\\":\\"E4\\"}",
-  "1/3 -> 1/2: {\\"note\\":\\"G4\\"}",
-  "5/6 -> 1/1: {\\"note\\":\\"B3\\"}",
-  "5/6 -> 1/1: {\\"note\\":\\"D4\\"}",
-  "5/6 -> 1/1: {\\"note\\":\\"E4\\"}",
-  "5/6 -> 1/1: {\\"note\\":\\"G4\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 55 https://strudel.cc/?ODAzfGV0ZcbI 1`] = `
-[
-  "0/1 -> 1/2: Bb2",
-  "0/1 -> 1/2: F3",
-  "0/1 -> 1/2: Bb3",
-  "1/2 -> 1/1: Bb2",
-  "1/2 -> 1/1: Bb2",
-  "1/2 -> 1/1: F3",
-  "1/2 -> 1/1: F3",
-  "1/2 -> 1/1: Bb3",
-  "1/2 -> 1/1: Bb3",
-  "0/1 -> 1/2: Bb1",
-  "1/2 -> 5/8: Bb1",
-  "3/4 -> 7/8: Bb1",
-  "0/1 -> 1/2: c1",
-  "1/2 -> 1/1: c1",
-  "1/2 -> 1/1: c3",
-  "0/1 -> 1/4: C1",
-  "1/4 -> 1/2: C3",
-  "1/2 -> 3/4: C1",
-  "3/4 -> 1/1: C3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 56 https://strudel.cc/?86BPLjJUsUlY 1`] = `
-[
-  "0/1 -> 1/2: Bb2",
-  "0/1 -> 1/2: F3",
-  "0/1 -> 1/2: Bb3",
-  "1/2 -> 1/1: Bb2",
-  "1/2 -> 1/1: Bb2",
-  "1/2 -> 1/1: F3",
-  "1/2 -> 1/1: F3",
-  "1/2 -> 1/1: Bb3",
-  "1/2 -> 1/1: Bb3",
-  "0/1 -> 1/2: Bb1",
-  "1/2 -> 5/8: Bb1",
-  "3/4 -> 7/8: Bb1",
-  "0/1 -> 1/2: c1",
-  "1/2 -> 1/1: c1",
-  "1/2 -> 1/1: c3",
-  "0/1 -> 1/4: C1",
-  "1/4 -> 1/2: C3",
-  "1/2 -> 3/4: C1",
-  "3/4 -> 1/1: C3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 57 https://strudel.cc/?a6p9WTalyHea 1`] = `
-[
-  "0/1 -> 1/2: c1",
-  "1/2 -> 1/1: c1",
-  "1/2 -> 1/1: x",
-  "1/4 -> 1/2: c4",
-  "3/4 -> 1/1: c4",
-]
-`;
-
-exports[`renders shared tunes > shared tune 58 https://strudel.cc/?ciNbEjRKpC5T 1`] = `
-[
-  "0/1 -> 1/2: c1",
-  "1/2 -> 1/1: c1",
-  "1/2 -> 1/1: x",
-  "1/4 -> 1/2: c4",
-  "3/4 -> 1/1: c4",
-]
-`;
-
-exports[`renders shared tunes > shared tune 59 https://strudel.cc/?pLhCIXogckDD 1`] = `
-[
-  "0/1 -> 1/4: B3",
-  "0/1 -> 1/4: D4",
-  "0/1 -> 1/4: E4",
-  "0/1 -> 1/4: G4",
-  "1/4 -> 1/2: C4",
-  "1/4 -> 1/2: E4",
-  "1/4 -> 1/2: F4",
-  "1/4 -> 1/2: A4",
-  "1/2 -> 3/4: A3",
-  "1/2 -> 3/4: C4",
-  "1/2 -> 3/4: E4",
-  "1/2 -> 3/4: G4",
-  "3/4 -> 1/1: B3",
-  "3/4 -> 1/1: E4",
-  "3/4 -> 1/1: F4",
-  "3/4 -> 1/1: A4",
-  "0/1 -> 1/2: C2",
-  "1/2 -> 1/1: D2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 60 https://strudel.cc/?hJFGyCmtF36W 1`] = `
-[
-  "0/1 -> 1/4: B3",
-  "0/1 -> 1/4: D4",
-  "0/1 -> 1/4: E4",
-  "0/1 -> 1/4: G4",
-  "1/4 -> 1/2: C4",
-  "1/4 -> 1/2: E4",
-  "1/4 -> 1/2: F4",
-  "1/4 -> 1/2: A4",
-  "1/2 -> 3/4: A3",
-  "1/2 -> 3/4: C4",
-  "1/2 -> 3/4: E4",
-  "1/2 -> 3/4: G4",
-  "3/4 -> 1/1: B3",
-  "3/4 -> 1/1: E4",
-  "3/4 -> 1/1: F4",
-  "3/4 -> 1/1: A4",
-  "0/1 -> 1/2: C2",
-  "1/2 -> 1/1: D2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 61 https://strudel.cc/?4HtBUNn4xAAA 1`] = `
-[
-  "0/1 -> 3053185/4904046: {\\"n\\":62,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3986.9405734726183}",
-  "0/1 -> 3053185/4904046: {\\"n\\":62,\\"s\\":\\"square\\",\\"cutoff\\":3986.9405734726183}",
-  "0/1 -> 3053185/4904046: {\\"n\\":62,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3986.9405734726183}",
-  "1/2 -> 7957231/9808092: {\\"n\\":50,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3942.3145276351606}",
-  "1/2 -> 7957231/9808092: {\\"n\\":50,\\"s\\":\\"square\\",\\"cutoff\\":3942.3145276351606}",
-  "3/4 -> 5204627/4904046: {\\"n\\":41,\\"s\\":\\"square\\",\\"cutoff\\":3897.7021140702864}",
-  "3/4 -> 5204627/4904046: {\\"n\\":41,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3858.612673535166}",
-  "0/1 -> 3053185/4904046: {\\"n\\":43,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3986.9405734726183}",
-  "0/1 -> 3053185/4904046: {\\"n\\":43,\\"s\\":\\"square\\",\\"cutoff\\":3986.9405734726183}",
-  "0/1 -> 3053185/4904046: {\\"n\\":43,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3986.9405734726183}",
-  "1/2 -> 2752604/2452023: {\\"n\\":69,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3924.645587531366}",
-  "1/2 -> 2752604/2452023: {\\"n\\":69,\\"s\\":\\"square\\",\\"cutoff\\":3924.645587531366}",
-  "1/2 -> 2752604/2452023: {\\"n\\":69,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3850.2031844444546}",
-  "-1/4 -> 3654347/9808092: {\\"n\\":48,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3995.31915093835}",
-  "-1/4 -> 3654347/9808092: {\\"n\\":48,\\"s\\":\\"square\\",\\"cutoff\\":3995.31915093835}",
-  "1/4 -> 8558393/9808092: {\\"n\\":74,\\"s\\":\\"square\\",\\"cutoff\\":3957.6603580168244}",
-  "1/4 -> 8558393/9808092: {\\"n\\":74,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3957.6603580168244}",
-  "1/4 -> 8558393/9808092: {\\"n\\":74,\\"s\\":\\"square\\",\\"cutoff\\":3957.6603580168244}",
-  "3/4 -> 5204627/4904046: {\\"n\\":62,\\"s\\":\\"square\\",\\"cutoff\\":3897.7021140702864}",
-  "3/4 -> 5204627/4904046: {\\"n\\":62,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3858.612673535166}",
-  "-1/4 -> 3654347/9808092: {\\"n\\":64,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3995.31915093835}",
-  "-1/4 -> 3654347/9808092: {\\"n\\":64,\\"s\\":\\"square\\",\\"cutoff\\":3995.31915093835}",
-  "1/4 -> 8558393/9808092: {\\"n\\":55,\\"s\\":\\"square\\",\\"cutoff\\":3957.6603580168244}",
-  "1/4 -> 8558393/9808092: {\\"n\\":55,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3957.6603580168244}",
-  "1/4 -> 8558393/9808092: {\\"n\\":55,\\"s\\":\\"square\\",\\"cutoff\\":3957.6603580168244}",
-  "3/4 -> 13462439/9808092: {\\"n\\":81,\\"s\\":\\"square\\",\\"cutoff\\":3897.7021140702864}",
-  "3/4 -> 13462439/9808092: {\\"n\\":81,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3813.515463898106}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 62 https://strudel.cc/?o6VENTMBn_Fo 1`] = `
-[
-  "0/1 -> 1/5: F#1",
-  "1/5 -> 2/5: F#1",
-  "2/5 -> 1/2: G#1",
-  "1/2 -> 3/5: C#2",
-  "3/5 -> 4/5: B1",
-  "4/5 -> 1/1: E2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 63 https://strudel.cc/?2MtjoYELsyy6 1`] = `
-[
-  "0/1 -> 2867650/6103323: {\\"note\\":\\"B1\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41203703703703703}",
-  "0/1 -> 2681020/6741463: {\\"note\\":\\"B1\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41203703703703703}",
-  "446428571428571/9375000000000000 -> 4553064403854419/13264137201096312: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "446428571428571/9375000000000000 -> 4553064403854419/13264137201096312: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "446428571428571/9375000000000000 -> 4553064403854419/13264137201096312: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/9375000000000000 -> 4553064403854419/13264137201096312: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "0/1 -> 1821896/6162503: {\\"note\\":\\"B1\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41203703703703703}",
-  "446428571428571/9375000000000000 -> 8824552566910673/32550699877411690: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "446428571428571/9375000000000000 -> 8824552566910673/32550699877411690: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "446428571428571/9375000000000000 -> 8824552566910673/32550699877411690: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/9375000000000000 -> 8824552566910673/32550699877411690: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "0/1 -> 5069600/22684527: {\\"note\\":\\"B1\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41203703703703703}",
-  "446428571428571/9375000000000000 -> 8824552566910673/32550699877411690: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "446428571428571/9375000000000000 -> 8824552566910673/32550699877411690: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "446428571428571/9375000000000000 -> 8824552566910673/32550699877411690: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/9375000000000000 -> 8824552566910673/32550699877411690: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "0/1 -> 5069600/22684527: {\\"note\\":\\"B1\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41203703703703703}",
-  "446428571428571/9375000000000000 -> 4553064403854419/13264137201096312: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "446428571428571/9375000000000000 -> 4553064403854419/13264137201096312: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "446428571428571/9375000000000000 -> 4553064403854419/13264137201096312: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/9375000000000000 -> 4553064403854419/13264137201096312: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "0/1 -> 1821896/6162503: {\\"note\\":\\"B1\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41203703703703703}",
-  "446428571428571/9375000000000000 -> 3230789307776333/7255143743387577: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "446428571428571/9375000000000000 -> 3230789307776333/7255143743387577: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "446428571428571/9375000000000000 -> 3230789307776333/7255143743387577: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/9375000000000000 -> 3230789307776333/7255143743387577: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "0/1 -> 2681020/6741463: {\\"note\\":\\"B1\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41203703703703703}",
-  "446428571428571/9375000000000000 -> 3625532718823936/7006271198968491: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "446428571428571/9375000000000000 -> 3625532718823936/7006271198968491: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "446428571428571/9375000000000000 -> 3625532718823936/7006271198968491: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/9375000000000000 -> 3625532718823936/7006271198968491: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "0/1 -> 2867650/6103323: {\\"note\\":\\"B1\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41203703703703703}",
-  "446428571428571/9375000000000000 -> 3625532718823936/7006271198968491: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "446428571428571/9375000000000000 -> 3625532718823936/7006271198968491: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "446428571428571/9375000000000000 -> 3625532718823936/7006271198968491: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/9375000000000000 -> 3625532718823936/7006271198968491: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "0/1 -> 2867650/6103323: {\\"note\\":\\"B1\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41203703703703703}",
-  "1/6 -> 4902091/12206646: {\\"note\\":\\"B3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5231481481481481}",
-  "1/6 -> 4902091/12206646: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "446428571428571/9375000000000000 -> 3230789307776333/7255143743387577: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "446428571428571/9375000000000000 -> 3230789307776333/7255143743387577: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "446428571428571/9375000000000000 -> 3230789307776333/7255143743387577: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/9375000000000000 -> 3230789307776333/7255143743387577: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "0/1 -> 2681020/6741463: {\\"note\\":\\"B1\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41203703703703703}",
-  "1/6 -> 14784523/40448778: {\\"note\\":\\"B3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5231481481481481}",
-  "1/6 -> 14784523/40448778: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "446428571428571/9375000000000000 -> 4553064403854419/13264137201096312: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "446428571428571/9375000000000000 -> 4553064403854419/13264137201096312: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "446428571428571/9375000000000000 -> 4553064403854419/13264137201096312: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/9375000000000000 -> 4553064403854419/13264137201096312: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "0/1 -> 1821896/6162503: {\\"note\\":\\"B1\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41203703703703703}",
-  "1/6 -> 11628191/36975018: {\\"note\\":\\"B3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5231481481481481}",
-  "1/6 -> 11628191/36975018: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "446428571428571/9375000000000000 -> 8824552566910673/32550699877411690: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "446428571428571/9375000000000000 -> 8824552566910673/32550699877411690: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "446428571428571/9375000000000000 -> 8824552566910673/32550699877411690: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/9375000000000000 -> 8824552566910673/32550699877411690: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "1/6 -> 12631109/45369054: {\\"note\\":\\"B3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5231481481481481}",
-  "1/6 -> 12631109/45369054: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "446428571428571/9375000000000000 -> 8824552566910673/32550699877411690: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "446428571428571/9375000000000000 -> 8824552566910673/32550699877411690: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "446428571428571/9375000000000000 -> 8824552566910673/32550699877411690: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/9375000000000000 -> 8824552566910673/32550699877411690: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "1/6 -> 12631109/45369054: {\\"note\\":\\"B3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5231481481481481}",
-  "1/6 -> 12631109/45369054: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "446428571428571/9375000000000000 -> 4553064403854419/13264137201096312: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "446428571428571/9375000000000000 -> 4553064403854419/13264137201096312: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "446428571428571/9375000000000000 -> 4553064403854419/13264137201096312: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/9375000000000000 -> 4553064403854419/13264137201096312: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "0/1 -> 1821896/6162503: {\\"note\\":\\"B1\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41203703703703703}",
-  "1/6 -> 11628191/36975018: {\\"note\\":\\"B3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5231481481481481}",
-  "1/6 -> 11628191/36975018: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "446428571428571/9375000000000000 -> 3230789307776333/7255143743387577: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "446428571428571/9375000000000000 -> 3230789307776333/7255143743387577: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "446428571428571/9375000000000000 -> 3230789307776333/7255143743387577: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/9375000000000000 -> 3230789307776333/7255143743387577: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "0/1 -> 2681020/6741463: {\\"note\\":\\"B1\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41203703703703703}",
-  "1/6 -> 14784523/40448778: {\\"note\\":\\"B3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5231481481481481}",
-  "1/6 -> 14784523/40448778: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "446428571428571/9375000000000000 -> 3625532718823936/7006271198968491: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "446428571428571/9375000000000000 -> 3625532718823936/7006271198968491: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "446428571428571/9375000000000000 -> 3625532718823936/7006271198968491: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/9375000000000000 -> 3625532718823936/7006271198968491: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "0/1 -> 2867650/6103323: {\\"note\\":\\"B1\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41203703703703703}",
-  "1/6 -> 4902091/12206646: {\\"note\\":\\"B3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5231481481481481}",
-  "1/6 -> 4902091/12206646: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "446428571428571/9375000000000000 -> 3625532718823936/7006271198968491: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "446428571428571/9375000000000000 -> 3625532718823936/7006271198968491: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "446428571428571/9375000000000000 -> 3625532718823936/7006271198968491: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/9375000000000000 -> 3625532718823936/7006271198968491: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "446428571428571/9375000000000000 -> 3230789307776333/7255143743387577: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "446428571428571/9375000000000000 -> 3230789307776333/7255143743387577: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "446428571428571/9375000000000000 -> 3230789307776333/7255143743387577: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/9375000000000000 -> 3230789307776333/7255143743387577: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "2/3 -> 6936532/6103323: {\\"note\\":\\"A3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5138888888888888}",
-  "2/3 -> 6936532/6103323: {\\"note\\":\\"C#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5324074074074074}",
-  "2/3 -> 6936532/6103323: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "2/3 -> 6936532/6103323: {\\"note\\":\\"F#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5555555555555556}",
-  "2/3 -> 6936532/6103323: {\\"note\\":\\"B1\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41203703703703703}",
-  "2/3 -> 5502707/6103323: {\\"note\\":\\"F#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5555555555555556}",
-  "2/3 -> 5502707/6103323: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "2/3 -> 21525986/20224389: {\\"note\\":\\"A3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5138888888888888}",
-  "2/3 -> 21525986/20224389: {\\"note\\":\\"C#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5324074074074074}",
-  "2/3 -> 21525986/20224389: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "2/3 -> 21525986/20224389: {\\"note\\":\\"F#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5555555555555556}",
-  "2/3 -> 21525986/20224389: {\\"note\\":\\"B1\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41203703703703703}",
-  "2/3 -> 17504456/20224389: {\\"note\\":\\"F#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5555555555555556}",
-  "2/3 -> 17504456/20224389: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "2/3 -> 17790694/18487509: {\\"note\\":\\"A3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5138888888888888}",
-  "2/3 -> 17790694/18487509: {\\"note\\":\\"C#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5324074074074074}",
-  "2/3 -> 17790694/18487509: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "2/3 -> 17790694/18487509: {\\"note\\":\\"F#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5555555555555556}",
-  "2/3 -> 17790694/18487509: {\\"note\\":\\"B1\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41203703703703703}",
-  "2/3 -> 15057850/18487509: {\\"note\\":\\"F#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5555555555555556}",
-  "2/3 -> 15057850/18487509: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "2/3 -> 20192618/22684527: {\\"note\\":\\"A3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5138888888888888}",
-  "2/3 -> 20192618/22684527: {\\"note\\":\\"C#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5324074074074074}",
-  "2/3 -> 20192618/22684527: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "2/3 -> 20192618/22684527: {\\"note\\":\\"F#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5555555555555556}",
-  "2/3 -> 20192618/22684527: {\\"note\\":\\"B1\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41203703703703703}",
-  "2/3 -> 17657818/22684527: {\\"note\\":\\"F#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5555555555555556}",
-  "2/3 -> 17657818/22684527: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "2/3 -> 20192618/22684527: {\\"note\\":\\"A3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5138888888888888}",
-  "2/3 -> 20192618/22684527: {\\"note\\":\\"C#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5324074074074074}",
-  "2/3 -> 20192618/22684527: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "2/3 -> 20192618/22684527: {\\"note\\":\\"F#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5555555555555556}",
-  "2/3 -> 20192618/22684527: {\\"note\\":\\"B1\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41203703703703703}",
-  "2/3 -> 17657818/22684527: {\\"note\\":\\"F#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5555555555555556}",
-  "2/3 -> 17657818/22684527: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "2/3 -> 17790694/18487509: {\\"note\\":\\"A3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5138888888888888}",
-  "2/3 -> 17790694/18487509: {\\"note\\":\\"C#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5324074074074074}",
-  "2/3 -> 17790694/18487509: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "2/3 -> 17790694/18487509: {\\"note\\":\\"F#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5555555555555556}",
-  "2/3 -> 17790694/18487509: {\\"note\\":\\"B1\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41203703703703703}",
-  "2/3 -> 15057850/18487509: {\\"note\\":\\"F#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5555555555555556}",
-  "2/3 -> 15057850/18487509: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "2/3 -> 21525986/20224389: {\\"note\\":\\"A3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5138888888888888}",
-  "2/3 -> 21525986/20224389: {\\"note\\":\\"C#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5324074074074074}",
-  "2/3 -> 21525986/20224389: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "2/3 -> 21525986/20224389: {\\"note\\":\\"F#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5555555555555556}",
-  "2/3 -> 21525986/20224389: {\\"note\\":\\"B1\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41203703703703703}",
-  "2/3 -> 17504456/20224389: {\\"note\\":\\"F#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5555555555555556}",
-  "2/3 -> 17504456/20224389: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "2/3 -> 6936532/6103323: {\\"note\\":\\"A3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5138888888888888}",
-  "2/3 -> 6936532/6103323: {\\"note\\":\\"C#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5324074074074074}",
-  "2/3 -> 6936532/6103323: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "2/3 -> 6936532/6103323: {\\"note\\":\\"F#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5555555555555556}",
-  "2/3 -> 6936532/6103323: {\\"note\\":\\"B1\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41203703703703703}",
-  "2/3 -> 5502707/6103323: {\\"note\\":\\"F#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5555555555555556}",
-  "2/3 -> 5502707/6103323: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "2/3 -> 6936532/6103323: {\\"note\\":\\"A3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5138888888888888}",
-  "2/3 -> 6936532/6103323: {\\"note\\":\\"C#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5324074074074074}",
-  "2/3 -> 6936532/6103323: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "2/3 -> 6936532/6103323: {\\"note\\":\\"F#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5555555555555556}",
-  "2/3 -> 6936532/6103323: {\\"note\\":\\"B1\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41203703703703703}",
-  "2/3 -> 21525986/20224389: {\\"note\\":\\"A3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5138888888888888}",
-  "2/3 -> 21525986/20224389: {\\"note\\":\\"C#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5324074074074074}",
-  "2/3 -> 21525986/20224389: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "2/3 -> 21525986/20224389: {\\"note\\":\\"F#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5555555555555556}",
-  "2/3 -> 21525986/20224389: {\\"note\\":\\"B1\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41203703703703703}",
-  "2/3 -> 17790694/18487509: {\\"note\\":\\"A3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5138888888888888}",
-  "2/3 -> 17790694/18487509: {\\"note\\":\\"C#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5324074074074074}",
-  "2/3 -> 17790694/18487509: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "2/3 -> 17790694/18487509: {\\"note\\":\\"F#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5555555555555556}",
-  "2/3 -> 17790694/18487509: {\\"note\\":\\"B1\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41203703703703703}",
-  "2/3 -> 17790694/18487509: {\\"note\\":\\"A3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5138888888888888}",
-  "2/3 -> 17790694/18487509: {\\"note\\":\\"C#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5324074074074074}",
-  "2/3 -> 17790694/18487509: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "2/3 -> 17790694/18487509: {\\"note\\":\\"F#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5555555555555556}",
-  "2/3 -> 17790694/18487509: {\\"note\\":\\"B1\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41203703703703703}",
-  "2/3 -> 21525986/20224389: {\\"note\\":\\"A3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5138888888888888}",
-  "2/3 -> 21525986/20224389: {\\"note\\":\\"C#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5324074074074074}",
-  "2/3 -> 21525986/20224389: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "2/3 -> 21525986/20224389: {\\"note\\":\\"F#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5555555555555556}",
-  "2/3 -> 21525986/20224389: {\\"note\\":\\"B1\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41203703703703703}",
-  "2/3 -> 6936532/6103323: {\\"note\\":\\"A3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5138888888888888}",
-  "2/3 -> 6936532/6103323: {\\"note\\":\\"C#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5324074074074074}",
-  "2/3 -> 6936532/6103323: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "2/3 -> 6936532/6103323: {\\"note\\":\\"F#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5555555555555556}",
-  "2/3 -> 6936532/6103323: {\\"note\\":\\"B1\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41203703703703703}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 64 https://strudel.cc/?vJ2KTtZo20cu 1`] = `
-[
-  "0/1 -> 1/2: Bb2",
-  "0/1 -> 1/2: F3",
-  "0/1 -> 1/2: Bb3",
-  "1/2 -> 1/1: Bb2",
-  "1/2 -> 1/1: Bb2",
-  "1/2 -> 1/1: F3",
-  "1/2 -> 1/1: F3",
-  "1/2 -> 1/1: Bb3",
-  "1/2 -> 1/1: Bb3",
-  "0/1 -> 1/2: Bb1",
-  "1/2 -> 5/8: Bb1",
-  "3/4 -> 7/8: Bb1",
-  "0/1 -> 1/2: c1",
-  "1/2 -> 1/1: c1",
-  "1/2 -> 1/1: c3",
-  "0/1 -> 1/4: C1",
-  "1/4 -> 1/2: C3",
-  "1/2 -> 3/4: C1",
-  "3/4 -> 1/1: C3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 65 https://strudel.cc/?DhWsebFhaaI9 1`] = `
-[
-  "0/1 -> 1/2: Bb2",
-  "0/1 -> 1/2: F3",
-  "0/1 -> 1/2: Bb3",
-  "1/2 -> 1/1: Bb2",
-  "1/2 -> 1/1: Bb2",
-  "1/2 -> 1/1: F3",
-  "1/2 -> 1/1: F3",
-  "1/2 -> 1/1: Bb3",
-  "1/2 -> 1/1: Bb3",
-  "0/1 -> 1/2: Bb1",
-  "1/2 -> 5/8: Bb1",
-  "3/4 -> 7/8: Bb1",
-  "0/1 -> 1/2: c1",
-  "1/2 -> 1/1: c1",
-  "1/2 -> 1/1: c3",
-  "0/1 -> 1/4: C1",
-  "1/4 -> 1/2: C3",
-  "1/2 -> 3/4: C1",
-  "3/4 -> 1/1: C3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 66 https://strudel.cc/?TpZLuyJCkYlW 1`] = `
-[
-  "0/1 -> 1/4: c4",
-  "1/4 -> 1/2: e3",
-  "1/2 -> 3/4: c4",
-  "3/4 -> 1/1: c4",
-]
-`;
-
-exports[`renders shared tunes > shared tune 67 https://strudel.cc/?pQKoHsxS2h84 1`] = `
-[
-  "0/1 -> 1/4: {\\"n\\":62,\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000}",
-  "1/2 -> 5/8: {\\"n\\":50,\\"s\\":\\"square\\",\\"cutoff\\":2000}",
-  "3/4 -> 7/8: {\\"n\\":41,\\"s\\":\\"square\\",\\"cutoff\\":2000}",
-  "1/4 -> 1/2: {\\"n\\":74,\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000}",
-  "3/4 -> 7/8: {\\"n\\":62,\\"s\\":\\"square\\",\\"cutoff\\":2000}",
-  "0/1 -> 1/4: {\\"n\\":43,\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000}",
-  "1/2 -> 3/4: {\\"n\\":69,\\"s\\":\\"square\\",\\"cutoff\\":2000}",
-  "1/4 -> 1/2: {\\"n\\":55,\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000}",
-  "3/4 -> 1/1: {\\"n\\":81,\\"s\\":\\"square\\",\\"cutoff\\":2000}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 68 https://strudel.cc/?gL4HMl9q43o6 1`] = `
-[
-  "0/1 -> 1/4: c4",
-  "1/4 -> 1/2: e3",
-  "1/2 -> 3/4: e3",
-  "3/4 -> 1/1: c4",
-]
-`;
-
-exports[`renders shared tunes > shared tune 69 https://strudel.cc/?QoKBBsdDBQro 1`] = `
-[
-  "0/1 -> 1/4: c4",
-  "1/4 -> 1/2: e3",
-  "1/2 -> 3/4: e3",
-  "3/4 -> 1/1: c4",
-]
-`;
-
-exports[`renders shared tunes > shared tune 70 https://strudel.cc/?TGp3R_6-qmvY 1`] = `
-[
-  "0/1 -> 1/8: c3",
-  "1/8 -> 1/4: e3",
-  "1/4 -> 1/2: c4",
-  "1/2 -> 3/4: c4",
-  "3/4 -> 1/1: e3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 71 https://strudel.cc/?Oais65XPBeAV 1`] = `
-[
-  "0/1 -> 1/3: {\\"note\\":\\"c9\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.75}",
-  "1/3 -> 2/3: {\\"note\\":\\"c9\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.75}",
-  "2/3 -> 1/1: {\\"note\\":\\"c9\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.75}",
-  "0/1 -> 1/2: {\\"note\\":\\"c8\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.75}",
-  "1/2 -> 1/1: {\\"note\\":\\"c8\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.75}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 72 https://strudel.cc/?ldZPCC8_189H 1`] = `
-[
-  "0/1 -> 1/3: {\\"note\\":\\"c9\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.75}",
-  "1/3 -> 2/3: {\\"note\\":\\"c9\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.75}",
-  "2/3 -> 1/1: {\\"note\\":\\"c9\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.75}",
-  "0/1 -> 1/2: {\\"note\\":\\"c8\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.75}",
-  "1/2 -> 1/1: {\\"note\\":\\"c8\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.75}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 73 https://strudel.cc/?D--IwyHBNn0a 1`] = `[]`;
-
-exports[`renders shared tunes > shared tune 74 https://strudel.cc/?gRGnC9U7CLgh 1`] = `[]`;
-
-exports[`renders shared tunes > shared tune 75 https://strudel.cc/?rr1DhAIFVsNf 1`] = `[]`;
-
-exports[`renders shared tunes > shared tune 76 https://strudel.cc/?AnRyPR-aJRnM 1`] = `[]`;
-
-exports[`renders shared tunes > shared tune 77 https://strudel.cc/?CpHjU1-jPeGv 1`] = `[]`;
-
-exports[`renders shared tunes > shared tune 78 https://strudel.cc/?LgsIpYacgnRK 1`] = `[]`;
-
-exports[`renders shared tunes > shared tune 79 https://strudel.cc/?faC6ykfIhu1j 1`] = `
-[
-  "0/1 -> 1/1: F2",
-  "0/1 -> 1/1: F3",
-  "0/1 -> 1/1: C4",
-  "0/1 -> 1/1: Ab4",
-]
-`;
-
-exports[`renders shared tunes > shared tune 80 https://strudel.cc/?5_NKdDWsFCk1 1`] = `[]`;
-
-exports[`renders shared tunes > shared tune 81 https://strudel.cc/?kH7LV63mXASH 1`] = `[]`;
-
-exports[`renders shared tunes > shared tune 82 https://strudel.cc/?l7FO1TzD3yBA 1`] = `[]`;
-
-exports[`renders shared tunes > shared tune 83 https://strudel.cc/?3hSnOnJz8aPZ 1`] = `
-[
-  "0/1 -> 1/10: C3",
-  "0/1 -> 1/10: E3",
-  "0/1 -> 1/10: G3",
-  "1/4 -> 7/20: B3",
-  "1/4 -> 7/20: E4",
-  "1/4 -> 7/20: E3",
-  "1/2 -> 3/5: C3",
-  "1/2 -> 3/5: A2",
-  "1/2 -> 3/5: C3",
-  "3/4 -> 17/20: E3",
-  "3/4 -> 17/20: G3",
-  "3/4 -> 17/20: B3",
-  "0/1 -> 1/5: C2",
-  "1/2 -> 7/10: E2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 84 https://strudel.cc/?J3ClL0wQCBr_ 1`] = `
-[
-  "0/1 -> 1/8: {\\"note\\":\\"A2\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2206.5338497506646,\\"resonance\\":10,\\"clip\\":1}",
-  "3/8 -> 1/2: {\\"note\\":\\"A2\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2827.098521493671,\\"resonance\\":10,\\"clip\\":1}",
-  "3/4 -> 7/8: {\\"note\\":\\"A2\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3366.0584981088073,\\"resonance\\":10,\\"clip\\":1}",
-  "0/1 -> 1/4: {\\"note\\":\\"A3\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2312.732504596285,\\"resonance\\":10,\\"clip\\":1}",
-  "3/4 -> 1/1: {\\"note\\":\\"A3\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3443.5028842544402,\\"resonance\\":10,\\"clip\\":1}",
-  "-7/4 -> 1/4: {\\"note\\":\\"C4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2312.732504596285,\\"resonance\\":10,\\"clip\\":1}",
-  "-7/4 -> 1/4: {\\"note\\":\\"E4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2312.732504596285,\\"resonance\\":10,\\"clip\\":1}",
-  "1/4 -> 1/2: {\\"note\\":\\"C4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "1/4 -> 1/2: {\\"note\\":\\"E4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/2 -> 1/2: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2522.789774516997,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/2 -> 1/2: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2522.789774516997,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/2 -> 1/2: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2522.789774516997,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/2 -> 1/2: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2522.789774516997,\\"resonance\\":10,\\"clip\\":1}",
-  "1/2 -> 3/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3110.8609453791396,\\"resonance\\":10,\\"clip\\":1}",
-  "1/2 -> 3/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3110.8609453791396,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "3/4 -> 1/1: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3443.5028842544402,\\"resonance\\":10,\\"clip\\":1}",
-  "3/4 -> 1/1: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3443.5028842544402,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/4 -> 5/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/4 -> 5/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/4 -> 5/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/4 -> 5/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "0/1 -> 1/2: {\\"s\\":\\"bd:1\\"}",
-  "1/2 -> 1/1: {\\"s\\":\\"bd:1\\"}",
-  "1/2 -> 1/1: {\\"s\\":\\"sd:0\\"}",
-  "1/4 -> 1/2: {\\"s\\":\\"hh:0\\"}",
-  "3/4 -> 1/1: {\\"s\\":\\"hh:0\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 85 https://strudel.cc/?YC1KlrX1fOyP 1`] = `
-[
-  "0/1 -> 1/3: {\\"note\\":\\"D3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.4814814814814815}",
-  "1/3 -> 1/2: {\\"note\\":\\"Eb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.4861111111111111}",
-  "1/2 -> 2/3: {\\"note\\":\\"F3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.49537037037037035}",
-  "2/3 -> 1/1: {\\"note\\":\\"G3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5046296296296297}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 86 https://strudel.cc/?YD2MRLffOCRV 1`] = `
-[
-  "1/2 -> 1/1: e4",
-  "1/4 -> 1/2: c3",
-  "1/2 -> 3/4: c3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 87 https://strudel.cc/?XxvYG4XK-I5G 1`] = `
-[
-  "0/1 -> 1/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "0/1 -> 1/4: {\\"note\\":\\"B4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5787037037037037}",
-  "0/1 -> 1/4: {\\"note\\":\\"C5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5833333333333333}",
-  "0/1 -> 1/4: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "3/4 -> 1/1: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "3/4 -> 1/1: {\\"note\\":\\"B4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5787037037037037}",
-  "3/4 -> 1/1: {\\"note\\":\\"C5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5833333333333333}",
-  "3/4 -> 1/1: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "0/1 -> 1/2: {\\"note\\":\\"A2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.45833333333333337}",
-  "1/2 -> 1/1: {\\"note\\":\\"A2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.45833333333333337}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 88 https://strudel.cc/?FHXCltSQwouU 1`] = `
-[
-  "0/1 -> 3/4: c3",
-  "3/4 -> 1/1: eb3",
-  "3/4 -> 1/1: g3",
-  "3/4 -> 1/1: c4",
-  "0/1 -> 1/2: c2",
-  "1/2 -> 1/1: g2",
-  "0/1 -> 5/2: eb4",
-]
-`;
-
-exports[`renders shared tunes > shared tune 89 https://strudel.cc/?Hg6JP2F6ufl1 1`] = `
-[
-  "0/1 -> 1/3: c3",
-  "1/3 -> 2/3: e3",
-  "2/3 -> 1/1: g3",
-  "0/1 -> 1/2: c2",
-  "1/2 -> 1/1: g2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 90 https://strudel.cc/?lNxLnMcpieR3 1`] = `
-[
-  "0/1 -> 1/3: c3",
-  "1/3 -> 2/3: e3",
-  "2/3 -> 1/1: g3",
-  "0/1 -> 1/2: c2",
-  "1/2 -> 1/1: g2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 91 https://strudel.cc/?78PHBhVZovgo 1`] = `
-[
-  "0/1 -> 1/4: c3",
-  "1/5 -> 9/20: c3",
-  "9/20 -> 7/10: c3",
-  "17/40 -> 27/40: c3",
-  "27/40 -> 37/40: c3",
-  "13/20 -> 9/10: c3",
-  "9/10 -> 23/20: c3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 92 https://strudel.cc/?rXBp8MOz1iNw 1`] = `
-[
-  "0/1 -> 19/80: e5",
-  "1/2 -> 79/120: d5",
-  "2/3 -> 179/240: c5",
-  "11/12 -> 239/240: e5",
-  "1/4 -> 1/2: g4",
-  "3/4 -> 1/1: g4",
-  "0/1 -> 1/4: c3",
-  "1/2 -> 3/4: c3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 93 https://strudel.cc/?bbPVlOzXxAxn 1`] = `
-[
-  "-3761101961531/150000000000000 -> 2912966012823/50000000000000: F4",
-  "2912966012823/50000000000000 -> 141592653589793/1000000000000000: G4",
-  "141592653589793/1000000000000000 -> 33738898038469/150000000000000: C3",
-  "33738898038469/150000000000000 -> 15412966012823/50000000000000: D3",
-  "15412966012823/50000000000000 -> 391592653589793/1000000000000000: E3",
-  "391592653589793/1000000000000000 -> 71238898038469/150000000000000: F3",
-  "71238898038469/150000000000000 -> 27912966012823/50000000000000: G3",
-  "27912966012823/50000000000000 -> 641592653589793/1000000000000000: A3",
-  "641592653589793/1000000000000000 -> 108738898038469/150000000000000: B3",
-  "108738898038469/150000000000000 -> 40412966012823/50000000000000: C4",
-  "40412966012823/50000000000000 -> 891592653589793/1000000000000000: D4",
-  "891592653589793/1000000000000000 -> 146238898038469/150000000000000: E4",
-  "146238898038469/150000000000000 -> 52912966012823/50000000000000: F4",
-]
-`;
-
-exports[`renders shared tunes > shared tune 94 https://strudel.cc/?dZSKPnJiPMAz 1`] = `
-[
-  "-3761101961531/150000000000000 -> 2912966012823/50000000000000: E3",
-  "2912966012823/50000000000000 -> 141592653589793/1000000000000000: A3",
-  "141592653589793/1000000000000000 -> 33738898038469/150000000000000: D4",
-  "33738898038469/150000000000000 -> 15412966012823/50000000000000: G4",
-  "15412966012823/50000000000000 -> 391592653589793/1000000000000000: A4",
-  "391592653589793/1000000000000000 -> 71238898038469/150000000000000: A4",
-  "71238898038469/150000000000000 -> 27912966012823/50000000000000: G4",
-  "27912966012823/50000000000000 -> 641592653589793/1000000000000000: D4",
-  "641592653589793/1000000000000000 -> 108738898038469/150000000000000: A3",
-  "108738898038469/150000000000000 -> 40412966012823/50000000000000: E3",
-  "40412966012823/50000000000000 -> 891592653589793/1000000000000000: D3",
-  "891592653589793/1000000000000000 -> 146238898038469/150000000000000: D3",
-  "146238898038469/150000000000000 -> 52912966012823/50000000000000: E3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 95 https://strudel.cc/?l-zyGmnM6g_q 1`] = `
-[
-  "0/1 -> 1/8: {\\"note\\":\\"A2\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2206.5338497506646,\\"resonance\\":10,\\"clip\\":1}",
-  "3/8 -> 1/2: {\\"note\\":\\"A2\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2827.098521493671,\\"resonance\\":10,\\"clip\\":1}",
-  "3/4 -> 7/8: {\\"note\\":\\"A2\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3366.0584981088073,\\"resonance\\":10,\\"clip\\":1}",
-  "0/1 -> 1/4: {\\"note\\":\\"A3\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2312.732504596285,\\"resonance\\":10,\\"clip\\":1}",
-  "3/4 -> 1/1: {\\"note\\":\\"A3\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3443.5028842544402,\\"resonance\\":10,\\"clip\\":1}",
-  "-7/4 -> 1/4: {\\"note\\":\\"C4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2312.732504596285,\\"resonance\\":10,\\"clip\\":1}",
-  "-7/4 -> 1/4: {\\"note\\":\\"E4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2312.732504596285,\\"resonance\\":10,\\"clip\\":1}",
-  "1/4 -> 1/2: {\\"note\\":\\"C4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "1/4 -> 1/2: {\\"note\\":\\"E4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/2 -> 1/2: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2522.789774516997,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/2 -> 1/2: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2522.789774516997,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/2 -> 1/2: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2522.789774516997,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/2 -> 1/2: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2522.789774516997,\\"resonance\\":10,\\"clip\\":1}",
-  "1/2 -> 3/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3110.8609453791396,\\"resonance\\":10,\\"clip\\":1}",
-  "1/2 -> 3/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3110.8609453791396,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "3/4 -> 1/1: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3443.5028842544402,\\"resonance\\":10,\\"clip\\":1}",
-  "3/4 -> 1/1: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3443.5028842544402,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/4 -> 5/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/4 -> 5/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/4 -> 5/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/4 -> 5/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "0/1 -> 1/2: {\\"s\\":\\"bd:1\\"}",
-  "1/2 -> 1/1: {\\"s\\":\\"bd:1\\"}",
-  "1/2 -> 1/1: {\\"s\\":\\"sd:0\\"}",
-  "1/4 -> 1/2: {\\"s\\":\\"hh:0\\"}",
-  "3/4 -> 1/1: {\\"s\\":\\"hh:0\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 96 https://strudel.cc/?vEpJhDLHycD8 1`] = `
-[
-  "0/1 -> 3/20: 0",
-  "0/1 -> 3/20: 3",
-  "3/4 -> 9/10: 1",
-  "3/4 -> 9/10: 4",
-  "0/1 -> 3/10: -8",
-  "3/8 -> 27/40: -8",
-  "3/4 -> 21/20: -7",
-  "0/1 -> 3/200: 12",
-  "3/4 -> 153/200: 11",
-  "0/1 -> 3/20: c2",
-  "747/1000 -> 1497/1000: c1",
-  "0/1 -> 3/8: c2",
-  "3/8 -> 3/4: c2",
-  "3/4 -> 9/8: c2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 97 https://strudel.cc/?DHUbrEloJxMd 1`] = `
-[
-  "0/1 -> 19/80: {\\"note\\":\\"E4\\"}",
-  "1/2 -> 79/120: {\\"note\\":\\"D4\\"}",
-  "2/3 -> 179/240: {\\"note\\":\\"C4\\"}",
-  "11/12 -> 239/240: {\\"note\\":\\"E4\\"}",
-  "1/4 -> 1/2: {\\"note\\":\\"G3\\"}",
-  "3/4 -> 1/1: {\\"note\\":\\"G3\\"}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\"}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 98 https://strudel.cc/?-YW3kIKIGR8j 1`] = `
-[
-  "1/8 -> 1/4: {\\"n\\":\\"D1\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1699.6897509708342}",
-  "1/8 -> 1/4: {\\"n\\":\\"D1\\",\\"s\\":\\"square\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1699.6897509708342}",
-  "3/8 -> 1/2: {\\"n\\":\\"D2\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1765.826371664994}",
-  "3/8 -> 1/2: {\\"n\\":\\"D2\\",\\"s\\":\\"square\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1765.826371664994}",
-  "1/2 -> 5/8: {\\"n\\":\\"D1\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1798.799979846742}",
-  "1/2 -> 5/8: {\\"n\\":\\"D1\\",\\"s\\":\\"square\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1798.799979846742}",
-  "3/4 -> 7/8: {\\"n\\":\\"D3\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1864.4584935007128}",
-  "3/4 -> 7/8: {\\"n\\":\\"D3\\",\\"s\\":\\"square\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1864.4584935007128}",
-  "7/8 -> 1/1: {\\"n\\":\\"D3\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1897.1038487394403}",
-  "7/8 -> 1/1: {\\"n\\":\\"D3\\",\\"s\\":\\"square\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1897.1038487394403}",
-  "-3/8 -> 1/8: {\\"n\\":\\"G3\\",\\"s\\":\\"square\\",\\"gain\\":0.7,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0,\\"cutoff\\":1666.5665766857219}",
-  "-3/8 -> 1/8: {\\"n\\":\\"B3\\",\\"s\\":\\"square\\",\\"gain\\":0.7,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0,\\"cutoff\\":1666.5665766857219}",
-  "-1/4 -> 1/4: {\\"n\\":\\"G3\\",\\"s\\":\\"square\\",\\"gain\\":0.7,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0,\\"cutoff\\":1683.1306585059317}",
-  "-1/4 -> 1/4: {\\"n\\":\\"B3\\",\\"s\\":\\"square\\",\\"gain\\":0.7,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0,\\"cutoff\\":1683.1306585059317}",
-  "-1/8 -> 3/8: {\\"n\\":\\"G3\\",\\"s\\":\\"square\\",\\"gain\\":0.7,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0,\\"cutoff\\":1699.6897509708342}",
-  "-1/8 -> 3/8: {\\"n\\":\\"B3\\",\\"s\\":\\"square\\",\\"gain\\":0.7,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0,\\"cutoff\\":1699.6897509708342}",
-  "0/1 -> 3/8: {\\"n\\":\\"C#6\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.26103468453995016,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5998.072590601808,\\"cutoff\\":4000}",
-  "0/1 -> 3/8: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.26103468453995016,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5998.072590601808,\\"cutoff\\":4000}",
-  "0/1 -> 3/8: {\\"n\\":\\"E5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.26103468453995016,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5998.072590601808,\\"cutoff\\":4000}",
-  "0/1 -> 3/8: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.26103468453995016,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5998.072590601808,\\"cutoff\\":4000}",
-  "3/8 -> 3/4: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2828651860235305,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5982.671142387316,\\"cutoff\\":4000}",
-  "3/8 -> 3/4: {\\"n\\":\\"F#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2828651860235305,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5982.671142387316,\\"cutoff\\":4000}",
-  "3/8 -> 3/4: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2828651860235305,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5982.671142387316,\\"cutoff\\":4000}",
-  "3/8 -> 3/4: {\\"n\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2828651860235305,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5982.671142387316,\\"cutoff\\":4000}",
-  "3/4 -> 1/1: {\\"n\\":\\"F#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.300533478008833,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5958.137268909887,\\"cutoff\\":4000}",
-  "3/4 -> 1/1: {\\"n\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.300533478008833,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5958.137268909887,\\"cutoff\\":4000}",
-  "1/4 -> 5/8: {\\"n\\":\\"C#6\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2756442833140452,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5989.512318936654,\\"cutoff\\":4000}",
-  "1/4 -> 5/8: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2756442833140452,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5989.512318936654,\\"cutoff\\":4000}",
-  "1/4 -> 5/8: {\\"n\\":\\"E5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2756442833140452,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5989.512318936654,\\"cutoff\\":4000}",
-  "1/4 -> 5/8: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2756442833140452,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5989.512318936654,\\"cutoff\\":4000}",
-  "5/8 -> 1/1: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.29705226105983373,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5963.890147645195,\\"cutoff\\":4000}",
-  "5/8 -> 1/1: {\\"n\\":\\"F#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.29705226105983373,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5963.890147645195,\\"cutoff\\":4000}",
-  "5/8 -> 1/1: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.29705226105983373,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5963.890147645195,\\"cutoff\\":4000}",
-  "5/8 -> 1/1: {\\"n\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.29705226105983373,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5963.890147645195,\\"cutoff\\":4000}",
-  "1/2 -> 7/8: {\\"n\\":\\"C#6\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.29000691362123476,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5974.128467049176,\\"cutoff\\":4000}",
-  "1/2 -> 7/8: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.29000691362123476,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5974.128467049176,\\"cutoff\\":4000}",
-  "1/2 -> 7/8: {\\"n\\":\\"E5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.29000691362123476,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5974.128467049176,\\"cutoff\\":4000}",
-  "1/2 -> 7/8: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.29000691362123476,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5974.128467049176,\\"cutoff\\":4000}",
-  "7/8 -> 5/4: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.3107861971007485,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5938.355801271282,\\"cutoff\\":4000}",
-  "7/8 -> 5/4: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.3107861971007485,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5938.355801271282,\\"cutoff\\":4000}",
-  "3/4 -> 9/8: {\\"n\\":\\"C#6\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.30398425548024827,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5951.963201008076,\\"cutoff\\":4000}",
-  "3/4 -> 9/8: {\\"n\\":\\"E5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.30398425548024827,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5951.963201008076,\\"cutoff\\":4000}",
-  "0/1 -> 1/4: {\\"n\\":\\"F#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2573601511491127,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.143312438893,\\"cutoff\\":4000}",
-  "0/1 -> 1/4: {\\"n\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2573601511491127,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.143312438893,\\"cutoff\\":4000}",
-  "-1/8 -> 1/4: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2573601511491127,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.143312438893,\\"cutoff\\":4000}",
-  "-1/8 -> 1/4: {\\"n\\":\\"F#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2573601511491127,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.143312438893,\\"cutoff\\":4000}",
-  "-1/8 -> 1/4: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2573601511491127,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.143312438893,\\"cutoff\\":4000}",
-  "-1/8 -> 1/4: {\\"n\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2573601511491127,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.143312438893,\\"cutoff\\":4000}",
-  "1/4 -> 1/2: {\\"n\\":\\"F#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.27200957116830426,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5992.29333433282,\\"cutoff\\":4000}",
-  "1/4 -> 1/2: {\\"n\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.27200957116830426,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5992.29333433282,\\"cutoff\\":4000}",
-  "-1/4 -> 1/8: {\\"n\\":\\"C#6\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2536811842784369,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.785818935017,\\"cutoff\\":4000}",
-  "-1/4 -> 1/8: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2536811842784369,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.785818935017,\\"cutoff\\":4000}",
-  "-1/4 -> 1/8: {\\"n\\":\\"E5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2536811842784369,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.785818935017,\\"cutoff\\":4000}",
-  "-1/4 -> 1/8: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2536811842784369,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.785818935017,\\"cutoff\\":4000}",
-  "1/8 -> 1/2: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.26836160127988246,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5994.647308096509,\\"cutoff\\":4000}",
-  "1/8 -> 1/2: {\\"n\\":\\"F#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.26836160127988246,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5994.647308096509,\\"cutoff\\":4000}",
-  "1/8 -> 1/2: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.26836160127988246,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5994.647308096509,\\"cutoff\\":4000}",
-  "1/8 -> 1/2: {\\"n\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.26836160127988246,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5994.647308096509,\\"cutoff\\":4000}",
-  "1/2 -> 3/4: {\\"n\\":\\"F#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.28644702698548963,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5978.612153434527,\\"cutoff\\":4000}",
-  "1/2 -> 3/4: {\\"n\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.28644702698548963,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5978.612153434527,\\"cutoff\\":4000}",
-  "0/1 -> 1/4: bd",
-  "1/2 -> 3/4: bd",
-  "1/2 -> 1/1: sn",
-  "1/4 -> 1/2: hh3",
-  "3/4 -> 1/1: hh3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 99 https://strudel.cc/?iw5ossp4Sti1 1`] = `
-[
-  "0/1 -> 3/20: 0",
-  "0/1 -> 3/20: 3",
-  "3/4 -> 9/10: 1",
-  "3/4 -> 9/10: 4",
-  "0/1 -> 3/10: -8",
-  "3/8 -> 27/40: -8",
-  "3/4 -> 21/20: -7",
-  "0/1 -> 3/200: 12",
-  "3/4 -> 153/200: 11",
-  "0/1 -> 3/20: c2",
-  "747/1000 -> 1497/1000: c1",
-  "0/1 -> 3/8: c2",
-  "3/8 -> 3/4: c2",
-  "3/4 -> 9/8: c2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 101 https://strudel.cc/?ISMZvMGByNst 1`] = `
-[
-  "0/1 -> 1/3: bd",
-  "1/3 -> 2/3: hh",
-  "2/3 -> 1/1: sn",
-  "0/1 -> 1/20: G4",
-  "1/6 -> 13/60: G4",
-  "1/3 -> 23/60: B3",
-  "1/2 -> 11/20: B3",
-  "1/3 -> 23/60: E4",
-  "1/2 -> 11/20: E4",
-  "2/3 -> 43/60: G3",
-  "5/6 -> 53/60: G3",
-  "0/1 -> 4/3: c2",
-  "0/1 -> 4/3: c2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 102 https://strudel.cc/?PDjOPOnV3JR6 1`] = `
-[
-  "0/1 -> 1/2: {\\"note\\":\\"G1\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":1500}",
-  "1/2 -> 1/1: {\\"note\\":\\"G1\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":1500}",
-  "1/2 -> 3/5: {\\"note\\":\\"G3\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":1530.954945061934}",
-  "1/2 -> 3/5: {\\"note\\":\\"Bb3\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":1530.954945061934}",
-  "1/2 -> 3/5: {\\"note\\":\\"D4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":1530.954945061934}",
-  "5/8 -> 29/40: {\\"note\\":\\"G3\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":1530.954945061934}",
-  "5/8 -> 29/40: {\\"note\\":\\"Bb3\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":1530.954945061934}",
-  "5/8 -> 29/40: {\\"note\\":\\"D4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":1530.954945061934}",
-  "0/1 -> 1/20: {\\"note\\":\\"F4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":1132.6741512198269}",
-  "3/4 -> 17/20: {\\"note\\":\\"G3\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":1530.954945061934}",
-  "3/4 -> 17/20: {\\"note\\":\\"Bb3\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":1530.954945061934}",
-  "3/4 -> 17/20: {\\"note\\":\\"D4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":1530.954945061934}",
-  "1/8 -> 7/40: {\\"note\\":\\"F4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":1132.6741512198269}",
-  "7/8 -> 39/40: {\\"note\\":\\"G3\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":1530.954945061934}",
-  "7/8 -> 39/40: {\\"note\\":\\"Bb3\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":1530.954945061934}",
-  "7/8 -> 39/40: {\\"note\\":\\"D4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":1530.954945061934}",
-  "0/1 -> 1/2: {\\"s\\":\\"bd\\"}",
-  "1/2 -> 1/1: {\\"s\\":\\"bd\\"}",
-  "1/4 -> 3/8: {\\"s\\":\\"hh\\"}",
-  "3/8 -> 1/2: {\\"s\\":\\"hh\\"}",
-  "3/4 -> 7/8: {\\"s\\":\\"hh\\"}",
-  "7/8 -> 1/1: {\\"s\\":\\"hh\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 103 https://strudel.cc/?u7qAdlwp3Qig 1`] = `
-[
-  "1/2 -> 1/1: {\\"note\\":\\"F3\\"}",
-  "1/2 -> 1/1: {\\"note\\":\\"C4\\"}",
-  "0/1 -> 1/1: {\\"note\\":\\"D4\\"}",
-  "0/1 -> 2/1: {\\"note\\":\\"D3\\"}",
-  "-3/4 -> 1/4: {\\"note\\":\\"A4\\"}",
-  "1/4 -> 9/4: {\\"note\\":\\"D4\\"}",
-  "0/1 -> 1/8: {\\"note\\":\\"c3\\"}",
-  "3/8 -> 1/2: {\\"note\\":\\"c3\\"}",
-  "3/4 -> 7/8: {\\"note\\":\\"c3\\"}",
-  "0/1 -> 1/4: {\\"note\\":\\"e4\\"}",
-  "1/4 -> 1/2: {\\"note\\":\\"f3\\"}",
-  "1/2 -> 3/4: {\\"note\\":\\"d4\\"}",
-  "3/4 -> 7/8: {\\"note\\":\\"f3\\"}",
-  "7/8 -> 1/1: {\\"note\\":\\"f3\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 104 https://strudel.cc/?OhjceF8ZvYk8 1`] = `
-[
-  "1/8 -> 1/4: {\\"n\\":\\"D1\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1699.6897509708342}",
-  "1/8 -> 1/4: {\\"n\\":\\"D1\\",\\"s\\":\\"square\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1699.6897509708342}",
-  "3/8 -> 1/2: {\\"n\\":\\"D2\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1765.826371664994}",
-  "3/8 -> 1/2: {\\"n\\":\\"D2\\",\\"s\\":\\"square\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1765.826371664994}",
-  "1/2 -> 5/8: {\\"n\\":\\"D1\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1798.799979846742}",
-  "1/2 -> 5/8: {\\"n\\":\\"D1\\",\\"s\\":\\"square\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1798.799979846742}",
-  "3/4 -> 7/8: {\\"n\\":\\"D3\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1864.4584935007128}",
-  "3/4 -> 7/8: {\\"n\\":\\"D3\\",\\"s\\":\\"square\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1864.4584935007128}",
-  "7/8 -> 1/1: {\\"n\\":\\"D3\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1897.1038487394403}",
-  "7/8 -> 1/1: {\\"n\\":\\"D3\\",\\"s\\":\\"square\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1897.1038487394403}",
-  "-3/8 -> 1/8: {\\"n\\":\\"G3\\",\\"s\\":\\"square\\",\\"gain\\":0.7,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0,\\"cutoff\\":1666.5665766857219}",
-  "-3/8 -> 1/8: {\\"n\\":\\"B3\\",\\"s\\":\\"square\\",\\"gain\\":0.7,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0,\\"cutoff\\":1666.5665766857219}",
-  "-1/4 -> 1/4: {\\"n\\":\\"G3\\",\\"s\\":\\"square\\",\\"gain\\":0.7,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0,\\"cutoff\\":1683.1306585059317}",
-  "-1/4 -> 1/4: {\\"n\\":\\"B3\\",\\"s\\":\\"square\\",\\"gain\\":0.7,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0,\\"cutoff\\":1683.1306585059317}",
-  "-1/8 -> 3/8: {\\"n\\":\\"G3\\",\\"s\\":\\"square\\",\\"gain\\":0.7,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0,\\"cutoff\\":1699.6897509708342}",
-  "-1/8 -> 3/8: {\\"n\\":\\"B3\\",\\"s\\":\\"square\\",\\"gain\\":0.7,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0,\\"cutoff\\":1699.6897509708342}",
-  "0/1 -> 3/8: {\\"n\\":\\"C#6\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.26103468453995016,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5998.072590601808,\\"cutoff\\":4000}",
-  "0/1 -> 3/8: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.26103468453995016,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5998.072590601808,\\"cutoff\\":4000}",
-  "0/1 -> 3/8: {\\"n\\":\\"E5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.26103468453995016,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5998.072590601808,\\"cutoff\\":4000}",
-  "0/1 -> 3/8: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.26103468453995016,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5998.072590601808,\\"cutoff\\":4000}",
-  "3/8 -> 3/4: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2828651860235305,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5982.671142387316,\\"cutoff\\":4000}",
-  "3/8 -> 3/4: {\\"n\\":\\"F#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2828651860235305,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5982.671142387316,\\"cutoff\\":4000}",
-  "3/8 -> 3/4: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2828651860235305,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5982.671142387316,\\"cutoff\\":4000}",
-  "3/8 -> 3/4: {\\"n\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2828651860235305,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5982.671142387316,\\"cutoff\\":4000}",
-  "3/4 -> 1/1: {\\"n\\":\\"F#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.300533478008833,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5958.137268909887,\\"cutoff\\":4000}",
-  "3/4 -> 1/1: {\\"n\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.300533478008833,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5958.137268909887,\\"cutoff\\":4000}",
-  "1/4 -> 5/8: {\\"n\\":\\"C#6\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2756442833140452,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5989.512318936654,\\"cutoff\\":4000}",
-  "1/4 -> 5/8: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2756442833140452,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5989.512318936654,\\"cutoff\\":4000}",
-  "1/4 -> 5/8: {\\"n\\":\\"E5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2756442833140452,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5989.512318936654,\\"cutoff\\":4000}",
-  "1/4 -> 5/8: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2756442833140452,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5989.512318936654,\\"cutoff\\":4000}",
-  "5/8 -> 1/1: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.29705226105983373,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5963.890147645195,\\"cutoff\\":4000}",
-  "5/8 -> 1/1: {\\"n\\":\\"F#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.29705226105983373,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5963.890147645195,\\"cutoff\\":4000}",
-  "5/8 -> 1/1: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.29705226105983373,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5963.890147645195,\\"cutoff\\":4000}",
-  "5/8 -> 1/1: {\\"n\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.29705226105983373,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5963.890147645195,\\"cutoff\\":4000}",
-  "1/2 -> 7/8: {\\"n\\":\\"C#6\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.29000691362123476,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5974.128467049176,\\"cutoff\\":4000}",
-  "1/2 -> 7/8: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.29000691362123476,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5974.128467049176,\\"cutoff\\":4000}",
-  "1/2 -> 7/8: {\\"n\\":\\"E5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.29000691362123476,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5974.128467049176,\\"cutoff\\":4000}",
-  "1/2 -> 7/8: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.29000691362123476,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5974.128467049176,\\"cutoff\\":4000}",
-  "7/8 -> 5/4: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.3107861971007485,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5938.355801271282,\\"cutoff\\":4000}",
-  "7/8 -> 5/4: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.3107861971007485,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5938.355801271282,\\"cutoff\\":4000}",
-  "3/4 -> 9/8: {\\"n\\":\\"C#6\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.30398425548024827,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5951.963201008076,\\"cutoff\\":4000}",
-  "3/4 -> 9/8: {\\"n\\":\\"E5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.30398425548024827,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5951.963201008076,\\"cutoff\\":4000}",
-  "0/1 -> 1/4: {\\"n\\":\\"F#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2573601511491127,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.143312438893,\\"cutoff\\":4000}",
-  "0/1 -> 1/4: {\\"n\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2573601511491127,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.143312438893,\\"cutoff\\":4000}",
-  "-1/8 -> 1/4: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2573601511491127,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.143312438893,\\"cutoff\\":4000}",
-  "-1/8 -> 1/4: {\\"n\\":\\"F#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2573601511491127,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.143312438893,\\"cutoff\\":4000}",
-  "-1/8 -> 1/4: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2573601511491127,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.143312438893,\\"cutoff\\":4000}",
-  "-1/8 -> 1/4: {\\"n\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2573601511491127,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.143312438893,\\"cutoff\\":4000}",
-  "1/4 -> 1/2: {\\"n\\":\\"F#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.27200957116830426,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5992.29333433282,\\"cutoff\\":4000}",
-  "1/4 -> 1/2: {\\"n\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.27200957116830426,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5992.29333433282,\\"cutoff\\":4000}",
-  "-1/4 -> 1/8: {\\"n\\":\\"C#6\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2536811842784369,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.785818935017,\\"cutoff\\":4000}",
-  "-1/4 -> 1/8: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2536811842784369,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.785818935017,\\"cutoff\\":4000}",
-  "-1/4 -> 1/8: {\\"n\\":\\"E5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2536811842784369,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.785818935017,\\"cutoff\\":4000}",
-  "-1/4 -> 1/8: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2536811842784369,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.785818935017,\\"cutoff\\":4000}",
-  "1/8 -> 1/2: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.26836160127988246,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5994.647308096509,\\"cutoff\\":4000}",
-  "1/8 -> 1/2: {\\"n\\":\\"F#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.26836160127988246,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5994.647308096509,\\"cutoff\\":4000}",
-  "1/8 -> 1/2: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.26836160127988246,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5994.647308096509,\\"cutoff\\":4000}",
-  "1/8 -> 1/2: {\\"n\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.26836160127988246,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5994.647308096509,\\"cutoff\\":4000}",
-  "1/2 -> 3/4: {\\"n\\":\\"F#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.28644702698548963,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5978.612153434527,\\"cutoff\\":4000}",
-  "1/2 -> 3/4: {\\"n\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.28644702698548963,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5978.612153434527,\\"cutoff\\":4000}",
-  "0/1 -> 1/4: bd",
-  "1/2 -> 3/4: bd",
-  "1/2 -> 1/1: sn",
-  "1/4 -> 1/2: hh3",
-  "3/4 -> 1/1: hh3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 105 https://strudel.cc/?4yn-ch_d1hnA 1`] = `
-[
-  "0/1 -> 1/4: C3",
-  "0/1 -> 1/4: G3",
-  "0/1 -> 1/4: C4",
-  "1/2 -> 3/4: C3",
-  "1/2 -> 3/4: G3",
-  "1/2 -> 3/4: C4",
-  "0/1 -> 1/2: c2",
-  "1/2 -> 5/8: c2",
-  "3/4 -> 7/8: c2",
-  "0/1 -> 1/2: c1",
-  "1/2 -> 1/1: c1",
-]
-`;
-
-exports[`renders shared tunes > shared tune 106 https://strudel.cc/?2M1kLwRf6d-Q 1`] = `
-[
-  "0/1 -> 1/4: C3",
-  "0/1 -> 1/4: G3",
-  "0/1 -> 1/4: C4",
-  "1/2 -> 3/4: C3",
-  "1/2 -> 3/4: G3",
-  "1/2 -> 3/4: C4",
-  "0/1 -> 1/2: c2",
-  "1/2 -> 5/8: c2",
-  "3/4 -> 7/8: c2",
-  "0/1 -> 1/2: c1",
-  "1/2 -> 1/1: c1",
-]
-`;
-
-exports[`renders shared tunes > shared tune 107 https://strudel.cc/?XggCKeAH5uLK 1`] = `
-[
-  "0/1 -> 1/4: C3",
-  "0/1 -> 1/4: G3",
-  "0/1 -> 1/4: C4",
-  "1/2 -> 3/4: C3",
-  "1/2 -> 3/4: G3",
-  "1/2 -> 3/4: C4",
-  "0/1 -> 1/2: c2",
-  "1/2 -> 5/8: c2",
-  "3/4 -> 7/8: c2",
-  "0/1 -> 1/2: c1",
-  "1/2 -> 1/1: c1",
-]
-`;
-
-exports[`renders shared tunes > shared tune 108 https://strudel.cc/?BH_o1f7vPxd3 1`] = `
-[
-  "0/1 -> 3/4: c3",
-  "3/4 -> 1/1: eb3",
-  "3/4 -> 1/1: g3",
-  "3/4 -> 1/1: c4",
-  "0/1 -> 1/2: c2",
-  "1/2 -> 1/1: g2",
-  "0/1 -> 5/2: eb4",
-]
-`;
-
-exports[`renders shared tunes > shared tune 109 https://strudel.cc/?OdgRkOYpGrgF 1`] = `
-[
-  "0/1 -> 3/20: 0",
-  "0/1 -> 3/20: 3",
-  "3/4 -> 9/10: 1",
-  "3/4 -> 9/10: 4",
-  "0/1 -> 3/10: -8",
-  "3/8 -> 27/40: -8",
-  "3/4 -> 21/20: -7",
-  "0/1 -> 3/200: 12",
-  "3/4 -> 153/200: 11",
-  "0/1 -> 3/20: c2",
-  "747/1000 -> 1497/1000: c1",
-  "0/1 -> 3/8: c2",
-  "3/8 -> 3/4: c2",
-  "3/4 -> 9/8: c2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 110 https://strudel.cc/?Yizg74mNj_6L 1`] = `[]`;
-
-exports[`renders shared tunes > shared tune 113 https://strudel.cc/?X7Vln6QqABL2 1`] = `
-[
-  "0/1 -> 1/3: {\\"value\\":0,\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":null}",
-  "1/3 -> 2/3: {\\"value\\":5,\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":null}",
-  "2/3 -> 1/1: {\\"value\\":7,\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":null}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 114 https://strudel.cc/?ILwq_zKFMNN5 1`] = `
-[
-  "0/1 -> 1/3: bd",
-  "1/3 -> 2/3: hh",
-  "2/3 -> 1/1: sn",
-  "0/1 -> 1/20: G4",
-  "1/6 -> 13/60: G4",
-  "1/3 -> 23/60: B3",
-  "1/2 -> 11/20: B3",
-  "1/3 -> 23/60: E4",
-  "1/2 -> 11/20: E4",
-  "2/3 -> 43/60: G3",
-  "5/6 -> 53/60: G3",
-  "0/1 -> 4/3: c2",
-  "0/1 -> 4/3: c2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 115 https://strudel.cc/?CSzelQFTGerr 1`] = `
-[
-  "0/1 -> 63/220: f#6",
-  "7/22 -> 133/220: f#6",
-  "7/11 -> 203/220: f#6",
-  "21/22 -> 609/440: f#6",
-  "0/1 -> 21/88: 71",
-  "0/1 -> 21/88: 75",
-  "0/1 -> 21/88: 78",
-  "21/44 -> 63/88: 71",
-  "21/44 -> 63/88: 75",
-  "21/44 -> 63/88: 78",
-  "21/22 -> 105/88: 71",
-  "21/22 -> 105/88: 75",
-  "21/22 -> 105/88: 78",
-]
-`;
-
-exports[`renders shared tunes > shared tune 116 https://strudel.cc/?j5oC-CSjk7Kq 1`] = `
-[
-  "0/1 -> 1/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "0/1 -> 1/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "0/1 -> 1/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "0/1 -> 1/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 5/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 5/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 5/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 5/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "0/1 -> 1/2: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "3/4 -> 7/8: {\\"note\\":\\"G2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.44907407407407407}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 117 https://strudel.cc/?waoDkqtNx0Xe 1`] = `
-[
-  "0/1 -> 1/2: c1",
-  "1/2 -> 1/1: c1",
-  "1/2 -> 1/1: x",
-  "1/4 -> 1/2: c4",
-  "3/4 -> 1/1: c4",
-  "0/1 -> 1/2: B1",
-  "3/4 -> 1/1: B1",
-  "1/4 -> 13/44: A3",
-  "1/4 -> 13/44: C#4",
-  "1/4 -> 13/44: D4",
-  "1/4 -> 13/44: F#4",
-]
-`;
-
-exports[`renders shared tunes > shared tune 118 https://strudel.cc/?hHssvZuQ9eU- 1`] = `
-[
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/8 -> 1/4: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "1/8 -> 1/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/8 -> 1/4: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "1/8 -> 1/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/8 -> 1/4: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "1/8 -> 1/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/8 -> 1/4: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "1/8 -> 1/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/8 -> 1/4: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "1/8 -> 1/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/8 -> 1/4: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "1/8 -> 1/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/8 -> 1/4: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "1/8 -> 1/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/8 -> 1/4: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "1/8 -> 1/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 5/8: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 5/8: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 5/8: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 5/8: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 5/8: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 5/8: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 5/8: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 5/8: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 5/8: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 5/8: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 5/8: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 5/8: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 5/8: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 5/8: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 5/8: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 5/8: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "3/4 -> 7/8: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "3/4 -> 7/8: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "3/4 -> 7/8: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "3/4 -> 7/8: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "3/4 -> 7/8: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "3/4 -> 7/8: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "3/4 -> 7/8: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "3/4 -> 7/8: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "3/4 -> 7/8: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "3/4 -> 7/8: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "3/4 -> 7/8: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "3/4 -> 7/8: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "3/4 -> 7/8: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "3/4 -> 7/8: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "3/4 -> 7/8: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "3/4 -> 7/8: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 119 https://strudel.cc/?YjCJ3DhT9u4M 1`] = `[]`;
-
-exports[`renders shared tunes > shared tune 121 https://strudel.cc/?wrcmJLYiesgF 1`] = `
-[
-  "0/1 -> 19/80: e5",
-  "1/2 -> 79/120: d5",
-  "2/3 -> 179/240: c5",
-  "11/12 -> 239/240: e5",
-  "1/4 -> 1/2: g4",
-  "3/4 -> 1/1: g4",
-  "0/1 -> 1/4: c3",
-  "1/2 -> 3/4: c3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 122 https://strudel.cc/?tiYDzBGIFjYV 1`] = `
-[
-  "0/1 -> 2/1: {\\"note\\":\\"C3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.4722222222222222}",
-  "0/1 -> 2/1: {\\"note\\":\\"E3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.4907407407407407}",
-  "0/1 -> 1/1: {\\"note\\":\\"B3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5231481481481481}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 123 https://strudel.cc/?Y1nz8H0a10CF 1`] = `
-[
-  "-1666666666666667/7500000000000000 -> 2/9: G3",
-  "0/1 -> 4/3: E3",
-  "0/1 -> 4/3: A3",
-  "0/1 -> 4/3: D4",
-  "0/1 -> 4/3: G4",
-  "0/1 -> 4/3: B4",
-  "0/1 -> 2/3: D2",
-  "2/3 -> 7/9: D2",
-  "8/9 -> 1/1: D2",
-  "0/1 -> 2/9: c1",
-  "2/9 -> 4/9: c1",
-  "4/9 -> 2/3: c1",
-  "2/3 -> 8/9: c1",
-  "8/9 -> 10/9: c1",
-  "2/3 -> 4/3: c3",
-  "0/1 -> 10/9: c1",
-  "0/1 -> 16/3: F3",
-  "0/1 -> 16/3: A3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 124 https://strudel.cc/?SZDwdxhme28o 1`] = `
-[
-  "11/32 -> 1/2: {\\"n\\":\\"Bb3\\",\\"cutoff\\":1625,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.931367192988896}",
-  "11/32 -> 1/2: {\\"n\\":\\"D4\\",\\"cutoff\\":1625,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.931367192988896}",
-  "11/32 -> 1/2: {\\"n\\":\\"Eb4\\",\\"cutoff\\":1625,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.931367192988896}",
-  "11/32 -> 1/2: {\\"n\\":\\"G4\\",\\"cutoff\\":1625,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.931367192988896}",
-  "27/32 -> 1/1: {\\"n\\":\\"Bb3\\",\\"cutoff\\":1625,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.7003744165515706}",
-  "27/32 -> 1/1: {\\"n\\":\\"D4\\",\\"cutoff\\":1625,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.7003744165515706}",
-  "27/32 -> 1/1: {\\"n\\":\\"Eb4\\",\\"cutoff\\":1625,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.7003744165515706}",
-  "27/32 -> 1/1: {\\"n\\":\\"G4\\",\\"cutoff\\":1625,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.7003744165515706}",
-  "7/160 -> 1/5: {\\"n\\":\\"A3\\",\\"cutoff\\":875,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.9941475200179347}",
-  "7/160 -> 1/5: {\\"n\\":\\"C#4\\",\\"cutoff\\":875,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.9941475200179347}",
-  "7/160 -> 1/5: {\\"n\\":\\"D4\\",\\"cutoff\\":875,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.9941475200179347}",
-  "7/160 -> 1/5: {\\"n\\":\\"F#4\\",\\"cutoff\\":875,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.9941475200179347}",
-  "87/160 -> 7/10: {\\"n\\":\\"Bb3\\",\\"cutoff\\":1625,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.8549390618276451}",
-  "87/160 -> 7/10: {\\"n\\":\\"D4\\",\\"cutoff\\":1625,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.8549390618276451}",
-  "87/160 -> 7/10: {\\"n\\":\\"Eb4\\",\\"cutoff\\":1625,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.8549390618276451}",
-  "87/160 -> 7/10: {\\"n\\":\\"G4\\",\\"cutoff\\":1625,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.8549390618276451}",
-  "39/160 -> 2/5: {\\"n\\":\\"A3\\",\\"cutoff\\":875,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.959653570669591}",
-  "39/160 -> 2/5: {\\"n\\":\\"C#4\\",\\"cutoff\\":875,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.959653570669591}",
-  "39/160 -> 2/5: {\\"n\\":\\"D4\\",\\"cutoff\\":875,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.959653570669591}",
-  "39/160 -> 2/5: {\\"n\\":\\"F#4\\",\\"cutoff\\":875,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.959653570669591}",
-  "119/160 -> 9/10: {\\"n\\":\\"Bb3\\",\\"cutoff\\":1625,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.7562088040372065}",
-  "119/160 -> 9/10: {\\"n\\":\\"D4\\",\\"cutoff\\":1625,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.7562088040372065}",
-  "119/160 -> 9/10: {\\"n\\":\\"Eb4\\",\\"cutoff\\":1625,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.7562088040372065}",
-  "119/160 -> 9/10: {\\"n\\":\\"G4\\",\\"cutoff\\":1625,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.7562088040372065}",
-  "0/1 -> 1/16: {\\"n\\":\\"c2\\",\\"decay\\":0.1,\\"gain\\":0.5,\\"sustain\\":0.8,\\"cutoff\\":1416.8907004672358,\\"value\\":\\"x\\",\\"s\\":\\"sawtooth\\"}",
-  "3/16 -> 1/4: {\\"n\\":\\"c2\\",\\"decay\\":0.1,\\"gain\\":0.5,\\"sustain\\":0.8,\\"cutoff\\":1416.8907004672358,\\"value\\":\\"x\\",\\"s\\":\\"sawtooth\\"}",
-  "3/8 -> 7/16: {\\"n\\":\\"c2\\",\\"decay\\":0.1,\\"gain\\":0.5,\\"sustain\\":0.8,\\"cutoff\\":1416.8907004672358,\\"value\\":\\"x\\",\\"s\\":\\"sawtooth\\"}",
-  "1/2 -> 9/16: {\\"n\\":\\"eb2\\",\\"decay\\":0.1,\\"gain\\":0.5,\\"sustain\\":0.8,\\"cutoff\\":1717.61735139405,\\"value\\":\\"x\\",\\"s\\":\\"sawtooth\\"}",
-  "11/16 -> 3/4: {\\"n\\":\\"eb2\\",\\"decay\\":0.1,\\"gain\\":0.5,\\"sustain\\":0.8,\\"cutoff\\":1717.61735139405,\\"value\\":\\"x\\",\\"s\\":\\"sawtooth\\"}",
-  "7/8 -> 15/16: {\\"n\\":\\"eb2\\",\\"decay\\":0.1,\\"gain\\":0.5,\\"sustain\\":0.8,\\"cutoff\\":1717.61735139405,\\"value\\":\\"x\\",\\"s\\":\\"sawtooth\\"}",
-  "0/1 -> 1/6: {\\"s\\":\\"bd\\"}",
-  "1/2 -> 1/1: {\\"s\\":\\"sd\\"}",
-  "0/1 -> 11/32: {\\"s\\":\\"hh\\"}",
-  "1/2 -> 27/32: {\\"s\\":\\"hh\\"}",
-  "11/32 -> 1/2: {\\"s\\":\\"hh\\"}",
-  "27/32 -> 1/1: {\\"s\\":\\"hh\\"}",
-  "0/1 -> 1/4: {\\"n\\":\\"C5\\",\\"decay\\":0.05,\\"sustain\\":0,\\"gain\\":0.5,\\"pan\\":0.5782172325201155}",
-  "-3/16 -> 1/16: {\\"n\\":\\"D6\\",\\"decay\\":0.05,\\"sustain\\":0,\\"gain\\":0.5,\\"pan\\":0.5196299078795343}",
-  "13/16 -> 17/16: {\\"n\\":\\"D6\\",\\"decay\\":0.05,\\"sustain\\":0,\\"gain\\":0.5,\\"pan\\":0.9540715869125407}",
-  "-1/20 -> 1/5: {\\"n\\":\\"Bb5\\",\\"decay\\":0.05,\\"sustain\\":0,\\"gain\\":0.5,\\"pan\\":0.5626666167821521}",
-  "-19/80 -> 1/80: {\\"n\\":\\"A5\\",\\"decay\\":0.05,\\"sustain\\":0,\\"gain\\":0.5,\\"pan\\":0.5039269504443556}",
-  "1/80 -> 21/80: {\\"n\\":\\"D6\\",\\"decay\\":0.05,\\"sustain\\":0,\\"gain\\":0.5,\\"pan\\":0.5859645501397047}",
-  "1/5 -> 9/20: {\\"n\\":\\"C5\\",\\"decay\\":0.05,\\"sustain\\":0,\\"gain\\":0.5,\\"pan\\":0.6985739453173903}",
-  "1/80 -> 21/80: {\\"n\\":\\"D6\\",\\"decay\\":0.05,\\"sustain\\":0,\\"gain\\":0.5,\\"pan\\":0.5859645501397047}",
-  "3/20 -> 2/5: {\\"n\\":\\"Bb5\\",\\"decay\\":0.05,\\"sustain\\":0,\\"gain\\":0.5,\\"pan\\":0.6693689601226457}",
-  "-3/80 -> 17/80: {\\"n\\":\\"A5\\",\\"decay\\":0.05,\\"sustain\\":0,\\"gain\\":0.5,\\"pan\\":0.5665606692632762}",
-  "17/80 -> 37/80: {\\"n\\":\\"D6\\",\\"decay\\":0.05,\\"sustain\\":0,\\"gain\\":0.5,\\"pan\\":0.7057571793025544}",
-  "2/5 -> 13/20: {\\"n\\":\\"C5\\",\\"decay\\":0.05,\\"sustain\\":0,\\"gain\\":0.5,\\"pan\\":0.8064535268264882}",
-  "17/80 -> 37/80: {\\"n\\":\\"D6\\",\\"decay\\":0.05,\\"sustain\\":0,\\"gain\\":0.5,\\"pan\\":0.7057571793025544}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 125 https://strudel.cc/?m7Uyh34tQwqi 1`] = `
-[
-  "11/32 -> 1/2: {\\"n\\":\\"Bb3\\",\\"cutoff\\":1625,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.931367192988896}",
-  "11/32 -> 1/2: {\\"n\\":\\"D4\\",\\"cutoff\\":1625,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.931367192988896}",
-  "11/32 -> 1/2: {\\"n\\":\\"Eb4\\",\\"cutoff\\":1625,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.931367192988896}",
-  "11/32 -> 1/2: {\\"n\\":\\"G4\\",\\"cutoff\\":1625,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.931367192988896}",
-  "27/32 -> 1/1: {\\"n\\":\\"Bb3\\",\\"cutoff\\":1625,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.7003744165515706}",
-  "27/32 -> 1/1: {\\"n\\":\\"D4\\",\\"cutoff\\":1625,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.7003744165515706}",
-  "27/32 -> 1/1: {\\"n\\":\\"Eb4\\",\\"cutoff\\":1625,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.7003744165515706}",
-  "27/32 -> 1/1: {\\"n\\":\\"G4\\",\\"cutoff\\":1625,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.7003744165515706}",
-  "7/160 -> 1/5: {\\"n\\":\\"A3\\",\\"cutoff\\":875,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.9941475200179347}",
-  "7/160 -> 1/5: {\\"n\\":\\"C#4\\",\\"cutoff\\":875,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.9941475200179347}",
-  "7/160 -> 1/5: {\\"n\\":\\"D4\\",\\"cutoff\\":875,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.9941475200179347}",
-  "7/160 -> 1/5: {\\"n\\":\\"F#4\\",\\"cutoff\\":875,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.9941475200179347}",
-  "87/160 -> 7/10: {\\"n\\":\\"Bb3\\",\\"cutoff\\":1625,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.8549390618276451}",
-  "87/160 -> 7/10: {\\"n\\":\\"D4\\",\\"cutoff\\":1625,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.8549390618276451}",
-  "87/160 -> 7/10: {\\"n\\":\\"Eb4\\",\\"cutoff\\":1625,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.8549390618276451}",
-  "87/160 -> 7/10: {\\"n\\":\\"G4\\",\\"cutoff\\":1625,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.8549390618276451}",
-  "39/160 -> 2/5: {\\"n\\":\\"A3\\",\\"cutoff\\":875,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.959653570669591}",
-  "39/160 -> 2/5: {\\"n\\":\\"C#4\\",\\"cutoff\\":875,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.959653570669591}",
-  "39/160 -> 2/5: {\\"n\\":\\"D4\\",\\"cutoff\\":875,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.959653570669591}",
-  "39/160 -> 2/5: {\\"n\\":\\"F#4\\",\\"cutoff\\":875,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.959653570669591}",
-  "119/160 -> 9/10: {\\"n\\":\\"Bb3\\",\\"cutoff\\":1625,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.7562088040372065}",
-  "119/160 -> 9/10: {\\"n\\":\\"D4\\",\\"cutoff\\":1625,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.7562088040372065}",
-  "119/160 -> 9/10: {\\"n\\":\\"Eb4\\",\\"cutoff\\":1625,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.7562088040372065}",
-  "119/160 -> 9/10: {\\"n\\":\\"G4\\",\\"cutoff\\":1625,\\"s\\":\\"square\\",\\"decay\\":0.1,\\"sustain\\":0,\\"resonance\\":16,\\"gain\\":0.2,\\"pan\\":0.7562088040372065}",
-  "0/1 -> 1/16: {\\"n\\":\\"c2\\",\\"decay\\":0.1,\\"gain\\":0.5,\\"sustain\\":0.8,\\"cutoff\\":1416.8907004672358,\\"value\\":\\"x\\",\\"s\\":\\"sawtooth\\"}",
-  "3/16 -> 1/4: {\\"n\\":\\"c2\\",\\"decay\\":0.1,\\"gain\\":0.5,\\"sustain\\":0.8,\\"cutoff\\":1416.8907004672358,\\"value\\":\\"x\\",\\"s\\":\\"sawtooth\\"}",
-  "3/8 -> 7/16: {\\"n\\":\\"c2\\",\\"decay\\":0.1,\\"gain\\":0.5,\\"sustain\\":0.8,\\"cutoff\\":1416.8907004672358,\\"value\\":\\"x\\",\\"s\\":\\"sawtooth\\"}",
-  "1/2 -> 9/16: {\\"n\\":\\"eb2\\",\\"decay\\":0.1,\\"gain\\":0.5,\\"sustain\\":0.8,\\"cutoff\\":1717.61735139405,\\"value\\":\\"x\\",\\"s\\":\\"sawtooth\\"}",
-  "11/16 -> 3/4: {\\"n\\":\\"eb2\\",\\"decay\\":0.1,\\"gain\\":0.5,\\"sustain\\":0.8,\\"cutoff\\":1717.61735139405,\\"value\\":\\"x\\",\\"s\\":\\"sawtooth\\"}",
-  "7/8 -> 15/16: {\\"n\\":\\"eb2\\",\\"decay\\":0.1,\\"gain\\":0.5,\\"sustain\\":0.8,\\"cutoff\\":1717.61735139405,\\"value\\":\\"x\\",\\"s\\":\\"sawtooth\\"}",
-  "0/1 -> 1/6: {\\"s\\":\\"bd\\"}",
-  "1/2 -> 1/1: {\\"s\\":\\"sd\\"}",
-  "0/1 -> 11/32: {\\"s\\":\\"hh\\"}",
-  "1/2 -> 27/32: {\\"s\\":\\"hh\\"}",
-  "11/32 -> 1/2: {\\"s\\":\\"hh\\"}",
-  "27/32 -> 1/1: {\\"s\\":\\"hh\\"}",
-  "0/1 -> 1/4: {\\"n\\":\\"C5\\",\\"decay\\":0.05,\\"sustain\\":0,\\"gain\\":0.5,\\"pan\\":0.5782172325201155}",
-  "-3/16 -> 1/16: {\\"n\\":\\"D6\\",\\"decay\\":0.05,\\"sustain\\":0,\\"gain\\":0.5,\\"pan\\":0.5196299078795343}",
-  "13/16 -> 17/16: {\\"n\\":\\"D6\\",\\"decay\\":0.05,\\"sustain\\":0,\\"gain\\":0.5,\\"pan\\":0.9540715869125407}",
-  "-1/20 -> 1/5: {\\"n\\":\\"Bb5\\",\\"decay\\":0.05,\\"sustain\\":0,\\"gain\\":0.5,\\"pan\\":0.5626666167821521}",
-  "-19/80 -> 1/80: {\\"n\\":\\"A5\\",\\"decay\\":0.05,\\"sustain\\":0,\\"gain\\":0.5,\\"pan\\":0.5039269504443556}",
-  "1/80 -> 21/80: {\\"n\\":\\"D6\\",\\"decay\\":0.05,\\"sustain\\":0,\\"gain\\":0.5,\\"pan\\":0.5859645501397047}",
-  "1/5 -> 9/20: {\\"n\\":\\"C5\\",\\"decay\\":0.05,\\"sustain\\":0,\\"gain\\":0.5,\\"pan\\":0.6985739453173903}",
-  "1/80 -> 21/80: {\\"n\\":\\"D6\\",\\"decay\\":0.05,\\"sustain\\":0,\\"gain\\":0.5,\\"pan\\":0.5859645501397047}",
-  "3/20 -> 2/5: {\\"n\\":\\"Bb5\\",\\"decay\\":0.05,\\"sustain\\":0,\\"gain\\":0.5,\\"pan\\":0.6693689601226457}",
-  "-3/80 -> 17/80: {\\"n\\":\\"A5\\",\\"decay\\":0.05,\\"sustain\\":0,\\"gain\\":0.5,\\"pan\\":0.5665606692632762}",
-  "17/80 -> 37/80: {\\"n\\":\\"D6\\",\\"decay\\":0.05,\\"sustain\\":0,\\"gain\\":0.5,\\"pan\\":0.7057571793025544}",
-  "2/5 -> 13/20: {\\"n\\":\\"C5\\",\\"decay\\":0.05,\\"sustain\\":0,\\"gain\\":0.5,\\"pan\\":0.8064535268264882}",
-  "17/80 -> 37/80: {\\"n\\":\\"D6\\",\\"decay\\":0.05,\\"sustain\\":0,\\"gain\\":0.5,\\"pan\\":0.7057571793025544}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 126 https://strudel.cc/?P9d8_AXWM7ef 1`] = `
-[
-  "0/1 -> 3/4: c3",
-  "3/4 -> 1/1: eb3",
-  "3/4 -> 1/1: g3",
-  "3/4 -> 1/1: c4",
-  "0/1 -> 1/2: c2",
-  "1/2 -> 1/1: g2",
-  "0/1 -> 5/4: eb4",
-]
-`;
-
-exports[`renders shared tunes > shared tune 127 https://strudel.cc/?FM1koCTLh1IM 1`] = `
-[
-  "0/1 -> 1/10: C3",
-  "0/1 -> 1/10: E3",
-  "0/1 -> 1/10: G3",
-  "1/4 -> 7/20: B3",
-  "1/4 -> 7/20: E4",
-  "1/4 -> 7/20: E3",
-  "1/2 -> 3/5: C3",
-  "1/2 -> 3/5: A2",
-  "1/2 -> 3/5: C3",
-  "3/4 -> 17/20: E3",
-  "3/4 -> 17/20: G3",
-  "3/4 -> 17/20: B3",
-  "0/1 -> 1/5: C2",
-  "1/2 -> 7/10: E2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 128 https://strudel.cc/?1SAqiKiVI8r- 1`] = `
-[
-  "0/1 -> 3/20: 0",
-  "0/1 -> 3/20: 3",
-  "3/4 -> 9/10: 1",
-  "3/4 -> 9/10: 4",
-  "0/1 -> 3/10: -8",
-  "3/8 -> 27/40: -8",
-  "3/4 -> 21/20: -7",
-  "0/1 -> 3/200: 12",
-  "3/4 -> 153/200: 11",
-  "0/1 -> 3/20: c2",
-  "747/1000 -> 1497/1000: c1",
-  "0/1 -> 3/8: c2",
-  "3/8 -> 3/4: c2",
-  "3/4 -> 9/8: c2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 129 https://strudel.cc/?Pds79yD4qQKJ 1`] = `
-[
-  "0/1 -> 1/5: e4",
-  "2/5 -> 3/5: e3",
-  "3/5 -> 4/5: d4",
-]
-`;
-
-exports[`renders shared tunes > shared tune 130 https://strudel.cc/?DYJx5C-3NrV7 1`] = `
-[
-  "0/1 -> 5/26: {\\"note\\":\\"B2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.46759259259259256}",
-  "5/13 -> 15/26: {\\"note\\":\\"B2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.46759259259259256}",
-  "10/13 -> 155/156: {\\"note\\":\\"B2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.46759259259259256}",
-  "155/156 -> 15/13: {\\"note\\":\\"A2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.45833333333333337}",
-  "0/1 -> 15/26: {\\"note\\":\\"B3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5231481481481481}",
-  "5/52 -> 35/52: {\\"note\\":\\"C#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5324074074074074}",
-  "5/26 -> 10/13: {\\"note\\":\\"D#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "15/52 -> 45/52: {\\"note\\":\\"F4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5509259259259259}",
-  "5/13 -> 25/26: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "25/52 -> 55/52: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "15/26 -> 15/13: {\\"note\\":\\"B4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5787037037037037}",
-  "35/52 -> 5/4: {\\"note\\":\\"C#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.587962962962963}",
-  "5/13 -> 25/26: {\\"note\\":\\"B3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5231481481481481}",
-  "25/52 -> 55/52: {\\"note\\":\\"C#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5324074074074074}",
-  "15/26 -> 15/13: {\\"note\\":\\"D#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "35/52 -> 5/4: {\\"note\\":\\"F4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5509259259259259}",
-  "10/13 -> 35/26: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "45/52 -> 75/52: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "25/26 -> 20/13: {\\"note\\":\\"B4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5787037037037037}",
-  "10/13 -> 35/26: {\\"note\\":\\"B3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5231481481481481}",
-  "45/52 -> 75/52: {\\"note\\":\\"C#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5324074074074074}",
-  "25/26 -> 20/13: {\\"note\\":\\"D#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "0/1 -> 80/13: {\\"s\\":\\"mad\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 131 https://strudel.cc/?9_BPqHIO4rPv 1`] = `
-[
-  "0/1 -> 27/40: {\\"note\\":\\"Db4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5324074074074074}",
-  "0/1 -> 27/40: {\\"note\\":\\"Ab4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5648148148148149}",
-  "0/1 -> 27/40: {\\"note\\":\\"Db4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5324074074074074}",
-  "0/1 -> 27/40: {\\"note\\":\\"Ab4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5648148148148149}",
-  "0/1 -> 27/40: {\\"note\\":\\"Db4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5324074074074074}",
-  "0/1 -> 27/40: {\\"note\\":\\"Ab4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5648148148148149}",
-  "0/1 -> 27/40: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "0/1 -> 27/40: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "0/1 -> 27/40: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "0/1 -> 27/40: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "0/1 -> 27/40: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "0/1 -> 27/40: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "0/1 -> 27/40: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "0/1 -> 27/40: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "0/1 -> 27/40: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "0/1 -> 27/40: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "0/1 -> 27/40: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "0/1 -> 27/40: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "0/1 -> 27/40: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "0/1 -> 27/40: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "0/1 -> 27/40: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "0/1 -> 27/40: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "0/1 -> 27/40: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "0/1 -> 27/40: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "0/1 -> 27/40: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "0/1 -> 27/40: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "0/1 -> 27/40: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "0/1 -> 27/40: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "0/1 -> 27/40: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "0/1 -> 27/40: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "0/1 -> 171/160: {\\"note\\":\\"Bb2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.46296296296296297}",
-  "3/4 -> 33/40: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "3/4 -> 33/40: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "3/4 -> 33/40: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "3/4 -> 33/40: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "0/1 -> 171/160: {\\"note\\":\\"Bb2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.46296296296296297}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 132 https://strudel.cc/?FwkQ0EG3Kkwm 1`] = `
-[
-  "0/1 -> 1/2: Bb2",
-  "0/1 -> 1/2: F3",
-  "0/1 -> 1/2: Bb3",
-  "1/2 -> 1/1: Bb2",
-  "1/2 -> 1/1: Bb2",
-  "1/2 -> 1/1: F3",
-  "1/2 -> 1/1: F3",
-  "1/2 -> 1/1: Bb3",
-  "1/2 -> 1/1: Bb3",
-  "0/1 -> 1/2: Bb1",
-  "1/2 -> 5/8: Bb1",
-  "3/4 -> 7/8: Bb1",
-  "0/1 -> 1/2: c1",
-  "1/2 -> 1/1: c1",
-  "1/2 -> 1/1: c3",
-  "0/1 -> 1/4: C1",
-  "1/4 -> 1/2: C3",
-  "1/2 -> 3/4: C1",
-  "3/4 -> 1/1: C3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 133 https://strudel.cc/?Cb_YrHpHKkJN 1`] = `
-[
-  "0/1 -> 1/8: {\\"note\\":\\"A2\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2206.5338497506646,\\"resonance\\":10,\\"clip\\":1}",
-  "3/8 -> 1/2: {\\"note\\":\\"A2\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2827.098521493671,\\"resonance\\":10,\\"clip\\":1}",
-  "3/4 -> 7/8: {\\"note\\":\\"A2\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3366.0584981088073,\\"resonance\\":10,\\"clip\\":1}",
-  "0/1 -> 1/4: {\\"note\\":\\"A3\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2312.732504596285,\\"resonance\\":10,\\"clip\\":1}",
-  "3/4 -> 1/1: {\\"note\\":\\"A3\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3443.5028842544402,\\"resonance\\":10,\\"clip\\":1}",
-  "-7/4 -> 1/4: {\\"note\\":\\"C4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2312.732504596285,\\"resonance\\":10,\\"clip\\":1}",
-  "-7/4 -> 1/4: {\\"note\\":\\"E4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2312.732504596285,\\"resonance\\":10,\\"clip\\":1}",
-  "1/4 -> 1/2: {\\"note\\":\\"C4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "1/4 -> 1/2: {\\"note\\":\\"E4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/2 -> 1/2: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2522.789774516997,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/2 -> 1/2: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2522.789774516997,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/2 -> 1/2: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2522.789774516997,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/2 -> 1/2: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2522.789774516997,\\"resonance\\":10,\\"clip\\":1}",
-  "1/2 -> 3/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3110.8609453791396,\\"resonance\\":10,\\"clip\\":1}",
-  "1/2 -> 3/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3110.8609453791396,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "3/4 -> 1/1: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3443.5028842544402,\\"resonance\\":10,\\"clip\\":1}",
-  "3/4 -> 1/1: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3443.5028842544402,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/4 -> 5/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/4 -> 5/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/4 -> 5/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/4 -> 5/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "0/1 -> 1/2: {\\"s\\":\\"bd:1\\"}",
-  "1/2 -> 1/1: {\\"s\\":\\"bd:1\\"}",
-  "1/2 -> 1/1: {\\"s\\":\\"sd:0\\"}",
-  "1/4 -> 1/2: {\\"s\\":\\"hh:0\\"}",
-  "3/4 -> 1/1: {\\"s\\":\\"hh:0\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 134 https://strudel.cc/?SkqbkK705Olu 1`] = `
-[
-  "7/8 -> 1/1: {\\"s\\":\\"hi\\"}",
-  "5/8 -> 3/4: {\\"s\\":\\"lo\\"}",
-  "3/8 -> 1/2: {\\"s\\":\\"hi\\"}",
-  "3/16 -> 1/4: {\\"s\\":\\"hi\\"}",
-  "0/1 -> 1/8: {\\"s\\":\\"hi\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 135 https://strudel.cc/?-hyad472v8by 1`] = `
-[
-  "0/1 -> 3/8: {\\"gain\\":1,\\"s\\":\\"lo\\",\\"speed\\":2}",
-  "3/8 -> 3/4: {\\"gain\\":0.5,\\"s\\":\\"lo\\",\\"speed\\":2}",
-  "3/4 -> 15/16: {\\"gain\\":1,\\"s\\":\\"lo\\",\\"speed\\":2}",
-  "15/16 -> 9/8: {\\"gain\\":1,\\"s\\":\\"lo\\",\\"speed\\":2}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 136 https://strudel.cc/?BApYR1gphKJ7 1`] = `
-[
-  "0/1 -> 3/8: {\\"gain\\":1,\\"s\\":\\"lo\\",\\"speed\\":2,\\"release\\":0.2,\\"clip\\":1}",
-  "3/8 -> 3/4: {\\"gain\\":0.5,\\"s\\":\\"lo\\",\\"speed\\":2,\\"release\\":0.2,\\"clip\\":1}",
-  "3/4 -> 15/16: {\\"gain\\":1,\\"s\\":\\"lo\\",\\"speed\\":2,\\"release\\":0.2,\\"clip\\":1}",
-  "15/16 -> 9/8: {\\"gain\\":1,\\"s\\":\\"lo\\",\\"speed\\":2,\\"release\\":0.2,\\"clip\\":1}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 137 https://strudel.cc/?wK1UQcYoYpoD 1`] = `
-[
-  "0/1 -> 3/16: {\\"gain\\":1,\\"s\\":\\"lo\\",\\"speed\\":1,\\"hcutoff\\":1000,\\"resonance\\":0.2}",
-  "3/16 -> 3/8: {\\"gain\\":0.5,\\"s\\":\\"lo\\",\\"speed\\":1,\\"hcutoff\\":1000,\\"resonance\\":0.2}",
-  "3/8 -> 15/32: {\\"gain\\":1,\\"s\\":\\"lo\\",\\"speed\\":1,\\"hcutoff\\":1000,\\"resonance\\":0.2}",
-  "15/32 -> 9/16: {\\"gain\\":1,\\"s\\":\\"lo\\",\\"speed\\":1,\\"hcutoff\\":1000,\\"resonance\\":0.2}",
-  "15/32 -> 9/16: {\\"gain\\":1,\\"s\\":\\"lo\\",\\"speed\\":1.2,\\"hcutoff\\":1000,\\"resonance\\":0.2}",
-  "9/16 -> 3/4: {\\"gain\\":0.2,\\"s\\":\\"lo\\",\\"speed\\":1.2,\\"hcutoff\\":1000,\\"resonance\\":0.2}",
-  "0/1 -> 3/16: {\\"gain\\":1,\\"s\\":\\"lo\\",\\"speed\\":1,\\"n\\":2,\\"hcutoff\\":1000,\\"resonance\\":0.2}",
-  "3/16 -> 3/8: {\\"gain\\":0.2,\\"s\\":\\"lo\\",\\"speed\\":1,\\"n\\":2,\\"hcutoff\\":1000,\\"resonance\\":0.2}",
-  "3/8 -> 9/16: {\\"gain\\":1,\\"s\\":\\"lo\\",\\"speed\\":1,\\"n\\":2,\\"hcutoff\\":1000,\\"resonance\\":0.2}",
-  "9/16 -> 3/4: {\\"gain\\":0.5,\\"s\\":\\"lo\\",\\"speed\\":1,\\"n\\":2,\\"hcutoff\\":1000,\\"resonance\\":0.2}",
-  "3/4 -> 15/16: {\\"gain\\":1,\\"s\\":\\"lo\\",\\"speed\\":1}",
-  "15/16 -> 9/8: {\\"gain\\":1,\\"s\\":\\"lo\\",\\"speed\\":1}",
-  "3/4 -> 9/8: {\\"gain\\":1,\\"s\\":\\"lo\\",\\"speed\\":1,\\"n\\":2}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 138 https://strudel.cc/?lB2HuXEXyTex 1`] = `
-[
-  "0/1 -> 6275565/1452119: A3",
-  "-9/8 -> 20400609/11616952: G4",
-  "3/8 -> 54560877/11616952: D4",
-  "-3/4 -> 12378483/5808476: F5",
-  "3/4 -> 29458617/5808476: G4",
-  "0/1 -> 3/2: D2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 139 https://strudel.cc/?WUxQVJIu27Nz 1`] = `
-[
-  "0/1 -> 1/1: {\\"gain\\":1,\\"s\\":\\"lo\\",\\"cps\\":1.1}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 140 https://strudel.cc/?ZQ-ce-Qj-nuP 1`] = `
-[
-  "0/1 -> 1/2: {\\"note\\":\\"F3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.49537037037037035}",
-  "1/4 -> 3/4: {\\"note\\":\\"F2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.4398148148148148}",
-  "1/2 -> 1/1: {\\"note\\":\\"F3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.49537037037037035}",
-  "1/2 -> 1/1: {\\"note\\":\\"Ab3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5092592592592593}",
-  "1/2 -> 1/1: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "1/2 -> 1/1: {\\"note\\":\\"F2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.4398148148148148}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 141 https://strudel.cc/?tBPkuxuje0iY 1`] = `
-[
-  "0/1 -> 1/3: bd",
-  "1/3 -> 2/3: hh",
-  "2/3 -> 1/1: sn",
-  "0/1 -> 1/20: G4",
-  "1/6 -> 13/60: G4",
-  "1/3 -> 23/60: B3",
-  "1/2 -> 11/20: B3",
-  "1/3 -> 23/60: E4",
-  "1/2 -> 11/20: E4",
-  "2/3 -> 43/60: G3",
-  "5/6 -> 53/60: G3",
-  "0/1 -> 4/3: c2",
-  "0/1 -> 4/3: c2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 142 https://strudel.cc/?ak6ZpErh0hl1 1`] = `
-[
-  "0/1 -> 1/8: {\\"note\\":\\"A2\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2206.5338497506646,\\"resonance\\":10,\\"clip\\":1}",
-  "3/8 -> 1/2: {\\"note\\":\\"A2\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2827.098521493671,\\"resonance\\":10,\\"clip\\":1}",
-  "3/4 -> 7/8: {\\"note\\":\\"A2\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3366.0584981088073,\\"resonance\\":10,\\"clip\\":1}",
-  "0/1 -> 1/4: {\\"note\\":\\"A3\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2312.732504596285,\\"resonance\\":10,\\"clip\\":1}",
-  "3/4 -> 1/1: {\\"note\\":\\"A3\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3443.5028842544402,\\"resonance\\":10,\\"clip\\":1}",
-  "-7/4 -> 1/4: {\\"note\\":\\"C4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2312.732504596285,\\"resonance\\":10,\\"clip\\":1}",
-  "-7/4 -> 1/4: {\\"note\\":\\"E4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2312.732504596285,\\"resonance\\":10,\\"clip\\":1}",
-  "1/4 -> 1/2: {\\"note\\":\\"C4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "1/4 -> 1/2: {\\"note\\":\\"E4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/2 -> 1/2: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2522.789774516997,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/2 -> 1/2: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2522.789774516997,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/2 -> 1/2: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2522.789774516997,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/2 -> 1/2: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2522.789774516997,\\"resonance\\":10,\\"clip\\":1}",
-  "1/2 -> 3/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3110.8609453791396,\\"resonance\\":10,\\"clip\\":1}",
-  "1/2 -> 3/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3110.8609453791396,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "3/4 -> 1/1: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3443.5028842544402,\\"resonance\\":10,\\"clip\\":1}",
-  "3/4 -> 1/1: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3443.5028842544402,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/4 -> 5/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/4 -> 5/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/4 -> 5/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/4 -> 5/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "0/1 -> 1/2: {\\"s\\":\\"bd:1\\"}",
-  "1/2 -> 1/1: {\\"s\\":\\"bd:1\\"}",
-  "1/2 -> 1/1: {\\"s\\":\\"sd:0\\"}",
-  "1/4 -> 1/2: {\\"s\\":\\"hh:0\\"}",
-  "3/4 -> 1/1: {\\"s\\":\\"hh:0\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 143 https://strudel.cc/?U9J_c-Insgbc 1`] = `
-[
-  "0/1 -> 63/220: f#6",
-  "7/22 -> 133/220: f#6",
-  "7/11 -> 203/220: f#6",
-  "21/22 -> 609/440: f#6",
-  "0/1 -> 21/88: 71",
-  "0/1 -> 21/88: 75",
-  "0/1 -> 21/88: 78",
-  "21/44 -> 63/88: 71",
-  "21/44 -> 63/88: 75",
-  "21/44 -> 63/88: 78",
-  "21/22 -> 105/88: 71",
-  "21/22 -> 105/88: 75",
-  "21/22 -> 105/88: 78",
-]
-`;
-
-exports[`renders shared tunes > shared tune 144 https://strudel.cc/?y2FS3Xvqv68d 1`] = `
-[
-  "0/1 -> 63/220: {\\"note\\":\\"f#6\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6666666666666667}",
-  "7/22 -> 133/220: {\\"note\\":\\"f#6\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6666666666666667}",
-  "7/11 -> 203/220: {\\"note\\":\\"f#6\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6666666666666667}",
-  "21/22 -> 609/440: {\\"note\\":\\"f#6\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6666666666666667}",
-  "0/1 -> 21/88: {\\"note\\":71,\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5787037037037037}",
-  "0/1 -> 21/88: {\\"note\\":75,\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "0/1 -> 21/88: {\\"note\\":78,\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6111111111111112}",
-  "21/44 -> 63/88: {\\"note\\":71,\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5787037037037037}",
-  "21/44 -> 63/88: {\\"note\\":75,\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "21/44 -> 63/88: {\\"note\\":78,\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6111111111111112}",
-  "21/22 -> 105/88: {\\"note\\":71,\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5787037037037037}",
-  "21/22 -> 105/88: {\\"note\\":75,\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "21/22 -> 105/88: {\\"note\\":78,\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6111111111111112}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 145 https://strudel.cc/?d7-gUjyRbKP9 1`] = `
-[
-  "0/1 -> 6/25: {\\"note\\":60,\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "0/1 -> 6/25: {\\"note\\":63,\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "0/1 -> 6/25: {\\"note\\":67,\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "12/25 -> 18/25: {\\"note\\":60,\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "12/25 -> 18/25: {\\"note\\":63,\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "12/25 -> 18/25: {\\"note\\":67,\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "24/25 -> 6/5: {\\"note\\":60,\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "24/25 -> 6/5: {\\"note\\":63,\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "24/25 -> 6/5: {\\"note\\":67,\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 146 https://strudel.cc/?lqXKPxgm_j0a 1`] = `
-[
-  "-38/5 -> 2/5: db3",
-  "-38/5 -> 2/5: eb3",
-  "-38/5 -> 2/5: e3",
-  "-38/5 -> 2/5: eb3",
-  "-38/5 -> 2/5: g3",
-  "-38/5 -> 2/5: a3",
-  "-38/5 -> 2/5: bb3",
-  "-38/5 -> 2/5: c3",
-  "-38/5 -> 2/5: db3",
-  "2/5 -> 22/5: db3",
-  "2/5 -> 22/5: f3",
-  "2/5 -> 22/5: eb3",
-  "2/5 -> 22/5: fb3",
-  "2/5 -> 22/5: a3",
-  "2/5 -> 22/5: b3",
-  "2/5 -> 22/5: c3",
-  "2/5 -> 22/5: d3",
-  "2/5 -> 22/5: db3",
-  "0/1 -> 4/1: Dracula?",
-]
-`;
-
-exports[`renders shared tunes > shared tune 147 https://strudel.cc/?5obY2LrCcbZI 1`] = `
-[
-  "1/3 -> 59/120: {\\"n\\":\\"c5\\",\\"s\\":\\"Oboe: Reed\\"}",
-  "1/2 -> 49/60: {\\"n\\":\\"d5\\",\\"s\\":\\"Oboe: Reed\\"}",
-  "5/6 -> 119/120: {\\"n\\":\\"eb5\\",\\"s\\":\\"Oboe: Reed\\"}",
-  "0/1 -> 1/2: {\\"n\\":60,\\"s\\":\\"Acoustic Grand Piano: Piano\\"}",
-  "0/1 -> 1/2: {\\"n\\":63,\\"s\\":\\"Acoustic Grand Piano: Piano\\"}",
-  "0/1 -> 1/2: {\\"n\\":67,\\"s\\":\\"Acoustic Grand Piano: Piano\\"}",
-  "1/2 -> 1/1: {\\"n\\":60,\\"s\\":\\"Acoustic Grand Piano: Piano\\"}",
-  "1/2 -> 1/1: {\\"n\\":63,\\"s\\":\\"Acoustic Grand Piano: Piano\\"}",
-  "1/2 -> 1/1: {\\"n\\":67,\\"s\\":\\"Acoustic Grand Piano: Piano\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 148 https://strudel.cc/?8262D2qsUNtO 1`] = `
-[
-  "0/1 -> 1/4: {\\"n\\":\\"c3\\",\\"s\\":\\"Oboe: Reed\\",\\"gain\\":0.5,\\"cutoff\\":1275.5812898145155}",
-  "1/4 -> 1/2: {\\"n\\":\\"eb3\\",\\"s\\":\\"Oboe: Reed\\",\\"gain\\":0.5,\\"cutoff\\":1600.013209717642}",
-  "1/2 -> 3/4: {\\"n\\":\\"g3\\",\\"s\\":\\"Oboe: Reed\\",\\"gain\\":0.5,\\"cutoff\\":1848.322651072291}",
-  "3/4 -> 1/1: {\\"n\\":\\"c4\\",\\"s\\":\\"Oboe: Reed\\",\\"gain\\":0.5,\\"cutoff\\":1982.7067523629073}",
-  "-1/8 -> 1/8: {\\"n\\":67,\\"s\\":\\"Oboe: Reed\\",\\"gain\\":0.5,\\"cutoff\\":1188.2154262966046}",
-  "1/8 -> 3/8: {\\"n\\":55,\\"s\\":\\"Oboe: Reed\\",\\"gain\\":0.5,\\"cutoff\\":1444.4150891285808}",
-  "3/8 -> 5/8: {\\"n\\":58,\\"s\\":\\"Oboe: Reed\\",\\"gain\\":0.5,\\"cutoff\\":1736.3961030678927}",
-  "5/8 -> 7/8: {\\"n\\":62,\\"s\\":\\"Oboe: Reed\\",\\"gain\\":0.5,\\"cutoff\\":1931.491579260158}",
-  "7/8 -> 9/8: {\\"n\\":67,\\"s\\":\\"Oboe: Reed\\",\\"gain\\":0.5,\\"cutoff\\":1995.666254004977}",
-  "0/1 -> 1/4: {\\"n\\":72,\\"s\\":\\"Oboe: Reed\\",\\"gain\\":0.5,\\"cutoff\\":1275.5812898145155}",
-  "1/4 -> 1/2: {\\"n\\":60,\\"s\\":\\"Oboe: Reed\\",\\"gain\\":0.5,\\"cutoff\\":1600.013209717642}",
-  "1/2 -> 3/4: {\\"n\\":63,\\"s\\":\\"Oboe: Reed\\",\\"gain\\":0.5,\\"cutoff\\":1848.322651072291}",
-  "3/4 -> 1/1: {\\"n\\":67,\\"s\\":\\"Oboe: Reed\\",\\"gain\\":0.5,\\"cutoff\\":1982.7067523629073}",
-  "-1/8 -> 1/8: {\\"n\\":74,\\"s\\":\\"Oboe: Reed\\",\\"gain\\":0.5,\\"cutoff\\":1188.2154262966046}",
-  "1/8 -> 3/8: {\\"n\\":79,\\"s\\":\\"Oboe: Reed\\",\\"gain\\":0.5,\\"cutoff\\":1444.4150891285808}",
-  "1/8 -> 3/8: {\\"n\\":79,\\"s\\":\\"Oboe: Reed\\",\\"gain\\":0.5,\\"cutoff\\":1444.4150891285808}",
-  "3/8 -> 5/8: {\\"n\\":67,\\"s\\":\\"Oboe: Reed\\",\\"gain\\":0.5,\\"cutoff\\":1736.3961030678927}",
-  "5/8 -> 7/8: {\\"n\\":70,\\"s\\":\\"Oboe: Reed\\",\\"gain\\":0.5,\\"cutoff\\":1931.491579260158}",
-  "7/8 -> 9/8: {\\"n\\":74,\\"s\\":\\"Oboe: Reed\\",\\"gain\\":0.5,\\"cutoff\\":1995.666254004977}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 149 https://strudel.cc/?9PUNz9fqWo2F 1`] = `
-[
-  "15/41 -> 177/328: {\\"n\\":\\"c5\\",\\"s\\":\\"Oboe: Reed\\",\\"gain\\":0.4}",
-  "45/82 -> 147/164: {\\"n\\":\\"d5\\",\\"s\\":\\"Oboe: Reed\\",\\"gain\\":0.4}",
-  "75/82 -> 357/328: {\\"n\\":\\"eb5\\",\\"s\\":\\"Oboe: Reed\\",\\"gain\\":0.4}",
-  "0/1 -> 45/82: {\\"n\\":60,\\"s\\":\\"Acoustic Grand Piano: Piano\\",\\"gain\\":0.25}",
-  "0/1 -> 45/82: {\\"n\\":63,\\"s\\":\\"Acoustic Grand Piano: Piano\\",\\"gain\\":0.25}",
-  "0/1 -> 45/82: {\\"n\\":55,\\"s\\":\\"Acoustic Grand Piano: Piano\\",\\"gain\\":0.25}",
-  "45/82 -> 45/41: {\\"n\\":60,\\"s\\":\\"Acoustic Grand Piano: Piano\\",\\"gain\\":0.25}",
-  "45/82 -> 45/41: {\\"n\\":63,\\"s\\":\\"Acoustic Grand Piano: Piano\\",\\"gain\\":0.25}",
-  "45/82 -> 45/41: {\\"n\\":55,\\"s\\":\\"Acoustic Grand Piano: Piano\\",\\"gain\\":0.25}",
-  "0/1 -> 45/82: {\\"n\\":60,\\"s\\":\\"Church Organ: Organ\\",\\"gain\\":0.2}",
-  "0/1 -> 45/82: {\\"n\\":63,\\"s\\":\\"Church Organ: Organ\\",\\"gain\\":0.2}",
-  "0/1 -> 45/82: {\\"n\\":55,\\"s\\":\\"Church Organ: Organ\\",\\"gain\\":0.2}",
-  "45/82 -> 45/41: {\\"n\\":60,\\"s\\":\\"Church Organ: Organ\\",\\"gain\\":0.2}",
-  "45/82 -> 45/41: {\\"n\\":63,\\"s\\":\\"Church Organ: Organ\\",\\"gain\\":0.2}",
-  "45/82 -> 45/41: {\\"n\\":55,\\"s\\":\\"Church Organ: Organ\\",\\"gain\\":0.2}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 150 https://strudel.cc/?wkDHhKIUtwY_ 1`] = `
-[
-  "0/1 -> 65/12: {\\"n\\":\\"d#5\\",\\"s\\":\\"Piccolo: Pipe\\",\\"gain\\":0.35}",
-  "0/1 -> 65/12: {\\"n\\":56,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.15}",
-  "0/1 -> 65/12: {\\"n\\":60,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.15}",
-  "0/1 -> 65/12: {\\"n\\":63,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.15}",
-  "0/1 -> 65/12: {\\"n\\":56,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.1}",
-  "0/1 -> 65/12: {\\"n\\":60,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.1}",
-  "0/1 -> 65/12: {\\"n\\":51,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.1}",
-  "0/1 -> 39/128: {\\"n\\":\\"G#1\\",\\"s\\":\\"Electric Bass (finger): Bass\\",\\"gain\\":0.3}",
-  "65/192 -> 247/384: {\\"n\\":\\"G#1\\",\\"s\\":\\"Electric Bass (finger): Bass\\",\\"gain\\":0.3}",
-  "65/96 -> 377/384: {\\"n\\":\\"G#1\\",\\"s\\":\\"Electric Bass (finger): Bass\\",\\"gain\\":0.3}",
-  "0/1 -> 65/192: {\\"s\\":\\"bd\\",\\"gain\\":0.2}",
-  "65/192 -> 65/96: {\\"s\\":\\"bd\\",\\"gain\\":0.2}",
-  "65/96 -> 65/48: {\\"s\\":\\"sn\\",\\"gain\\":0.2}",
-  "0/1 -> 65/96: {\\"s\\":\\"hh\\",\\"gain\\":0.2}",
-  "65/96 -> 65/48: {\\"s\\":\\"hh\\",\\"gain\\":0.2}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 151 https://strudel.cc/?Zj9qfA1PhcDS 1`] = `
-[
-  "0/1 -> 65/12: {\\"n\\":\\"d#5\\",\\"s\\":\\"Piccolo: Pipe\\",\\"gain\\":0.35}",
-  "0/1 -> 65/12: {\\"n\\":56,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.15}",
-  "0/1 -> 65/12: {\\"n\\":60,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.15}",
-  "0/1 -> 65/12: {\\"n\\":63,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.15}",
-  "0/1 -> 65/12: {\\"n\\":68,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.15}",
-  "0/1 -> 65/12: {\\"n\\":72,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.15}",
-  "0/1 -> 65/12: {\\"n\\":63,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.15}",
-  "0/1 -> 39/128: {\\"n\\":\\"G#1\\",\\"s\\":\\"Electric Bass (finger): Bass\\",\\"gain\\":0.3}",
-  "65/192 -> 247/384: {\\"n\\":\\"G#1\\",\\"s\\":\\"Electric Bass (finger): Bass\\",\\"gain\\":0.3}",
-  "65/96 -> 377/384: {\\"n\\":\\"G#1\\",\\"s\\":\\"Electric Bass (finger): Bass\\",\\"gain\\":0.3}",
-  "0/1 -> 65/192: {\\"s\\":\\"bd\\",\\"gain\\":0.2}",
-  "65/192 -> 65/96: {\\"s\\":\\"bd\\",\\"gain\\":0.2}",
-  "65/96 -> 65/48: {\\"s\\":\\"sn\\",\\"gain\\":0.2}",
-  "0/1 -> 65/96: {\\"s\\":\\"hh\\",\\"gain\\":0.2}",
-  "65/96 -> 65/48: {\\"s\\":\\"hh\\",\\"gain\\":0.2}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 152 https://strudel.cc/?p_G-4ZB295BP 1`] = `
-[
-  "0/1 -> 1/8: {\\"note\\":\\"A2\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2206.5338497506646,\\"resonance\\":10,\\"clip\\":1}",
-  "3/8 -> 1/2: {\\"note\\":\\"A2\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2827.098521493671,\\"resonance\\":10,\\"clip\\":1}",
-  "3/4 -> 7/8: {\\"note\\":\\"A2\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3366.0584981088073,\\"resonance\\":10,\\"clip\\":1}",
-  "0/1 -> 1/4: {\\"note\\":\\"A3\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2312.732504596285,\\"resonance\\":10,\\"clip\\":1}",
-  "3/4 -> 1/1: {\\"note\\":\\"A3\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3443.5028842544402,\\"resonance\\":10,\\"clip\\":1}",
-  "-7/4 -> 1/4: {\\"note\\":\\"C4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2312.732504596285,\\"resonance\\":10,\\"clip\\":1}",
-  "-7/4 -> 1/4: {\\"note\\":\\"E4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2312.732504596285,\\"resonance\\":10,\\"clip\\":1}",
-  "1/4 -> 1/2: {\\"note\\":\\"C4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "1/4 -> 1/2: {\\"note\\":\\"E4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/2 -> 1/2: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2522.789774516997,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/2 -> 1/2: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2522.789774516997,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/2 -> 1/2: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2522.789774516997,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/2 -> 1/2: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2522.789774516997,\\"resonance\\":10,\\"clip\\":1}",
-  "1/2 -> 3/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3110.8609453791396,\\"resonance\\":10,\\"clip\\":1}",
-  "1/2 -> 3/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3110.8609453791396,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "-5/4 -> 3/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2727.5302177148174,\\"resonance\\":10,\\"clip\\":1}",
-  "3/4 -> 1/1: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3443.5028842544402,\\"resonance\\":10,\\"clip\\":1}",
-  "3/4 -> 1/1: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":3443.5028842544402,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-1/1 -> 1/1: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/4 -> 5/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/4 -> 5/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/4 -> 5/4: {\\"note\\":\\"A4\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "-3/4 -> 5/4: {\\"note\\":\\"C5\\",\\"s\\":\\"flbass\\",\\"n\\":0,\\"gain\\":0.3,\\"cutoff\\":2924.3791043233605,\\"resonance\\":10,\\"clip\\":1}",
-  "0/1 -> 1/2: {\\"s\\":\\"bd:1\\"}",
-  "1/2 -> 1/1: {\\"s\\":\\"bd:1\\"}",
-  "1/2 -> 1/1: {\\"s\\":\\"sd:0\\"}",
-  "1/4 -> 1/2: {\\"s\\":\\"hh:0\\"}",
-  "3/4 -> 1/1: {\\"s\\":\\"hh:0\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 153 https://strudel.cc/?NWLKF4C7o4EX 1`] = `
-[
-  "0/1 -> 1/2: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "0/1 -> 1/2: {\\"note\\":\\"B4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5787037037037037}",
-  "0/1 -> 1/2: {\\"note\\":\\"C5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5833333333333333}",
-  "0/1 -> 1/2: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "3/4 -> 1/1: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "3/4 -> 1/1: {\\"note\\":\\"B4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5787037037037037}",
-  "3/4 -> 1/1: {\\"note\\":\\"C5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5833333333333333}",
-  "3/4 -> 1/1: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "0/1 -> 1/2: {\\"note\\":\\"A2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.45833333333333337}",
-  "1/2 -> 1/1: {\\"note\\":\\"A2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.45833333333333337}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 154 https://strudel.cc/?XhNBCyuzIVOD 1`] = `
-[
-  "0/1 -> 1457/3000: {\\"n\\":\\"c#6\\",\\"s\\":\\"Overdriven Guitar: Guitar\\",\\"gain\\":0.18}",
-  "47/90 -> 13771/18000: {\\"n\\":\\"f5\\",\\"s\\":\\"Overdriven Guitar: Guitar\\",\\"gain\\":0.18}",
-  "47/60 -> 9071/6000: {\\"n\\":\\"c6\\",\\"s\\":\\"Overdriven Guitar: Guitar\\",\\"gain\\":0.18}",
-  "0/1 -> 47/60: {\\"n\\":61,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.24}",
-  "0/1 -> 47/60: {\\"n\\":65,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.24}",
-  "0/1 -> 47/60: {\\"n\\":56,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.24}",
-  "47/60 -> 47/30: {\\"n\\":63,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.24}",
-  "47/60 -> 47/30: {\\"n\\":67,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.24}",
-  "47/60 -> 47/30: {\\"n\\":58,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.24}",
-  "0/1 -> 141/200: {\\"n\\":\\"C#2\\",\\"s\\":\\"Electric Bass (finger): Bass\\",\\"gain\\":0.3}",
-  "47/60 -> 893/600: {\\"n\\":\\"D#2\\",\\"s\\":\\"Electric Bass (finger): Bass\\",\\"gain\\":0.3}",
-  "0/1 -> 47/180: {\\"s\\":\\"bd\\",\\"gain\\":0.2}",
-  "47/90 -> 47/60: {\\"s\\":\\"bd\\",\\"gain\\":0.2}",
-  "47/60 -> 47/45: {\\"s\\":\\"sn\\",\\"gain\\":0.2}",
-  "0/1 -> 47/180: {\\"s\\":\\"hh\\",\\"gain\\":0.2}",
-  "47/180 -> 47/90: {\\"s\\":\\"hh\\",\\"gain\\":0.2}",
-  "47/90 -> 47/60: {\\"s\\":\\"hh\\",\\"gain\\":0.2}",
-  "47/60 -> 47/45: {\\"s\\":\\"hh\\",\\"gain\\":0.2}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 155 https://strudel.cc/?AL73np8C7Fe7 1`] = `
-[
-  "0/1 -> 589/1200: {\\"n\\":\\"C#5\\",\\"s\\":\\"Overdriven Guitar: Guitar\\",\\"gain\\":0.2}",
-  "19/36 -> 5567/7200: {\\"n\\":\\"F4\\",\\"s\\":\\"Overdriven Guitar: Guitar\\",\\"gain\\":0.2}",
-  "19/24 -> 3667/2400: {\\"n\\":\\"C5\\",\\"s\\":\\"Overdriven Guitar: Guitar\\",\\"gain\\":0.2}",
-  "0/1 -> 589/1200: {\\"n\\":\\"c#6\\",\\"s\\":\\"Overdriven Guitar: Guitar\\",\\"gain\\":0.1}",
-  "19/36 -> 5567/7200: {\\"n\\":\\"f5\\",\\"s\\":\\"Overdriven Guitar: Guitar\\",\\"gain\\":0.1}",
-  "19/24 -> 3667/2400: {\\"n\\":\\"c6\\",\\"s\\":\\"Overdriven Guitar: Guitar\\",\\"gain\\":0.1}",
-  "0/1 -> 19/24: {\\"n\\":61,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.25}",
-  "0/1 -> 19/24: {\\"n\\":65,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.25}",
-  "0/1 -> 19/24: {\\"n\\":56,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.25}",
-  "19/24 -> 19/12: {\\"n\\":63,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.25}",
-  "19/24 -> 19/12: {\\"n\\":67,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.25}",
-  "19/24 -> 19/12: {\\"n\\":58,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.25}",
-  "0/1 -> 57/80: {\\"n\\":\\"C#2\\",\\"s\\":\\"Electric Bass (finger): Bass\\",\\"gain\\":0.3}",
-  "19/24 -> 361/240: {\\"n\\":\\"D#2\\",\\"s\\":\\"Electric Bass (finger): Bass\\",\\"gain\\":0.3}",
-  "0/1 -> 125832027859158/476837158203125: {\\"s\\":\\"bd\\",\\"gain\\":0.25}",
-  "251664055718316/476837158203125 -> 19/24: {\\"s\\":\\"bd\\",\\"gain\\":0.25}",
-  "19/24 -> 2922870840145583/2769035532769500: {\\"s\\":\\"sn\\",\\"gain\\":0.25}",
-  "0/1 -> 125832027859158/476837158203125: {\\"s\\":\\"hh\\",\\"gain\\":0.25}",
-  "125832027859158/476837158203125 -> 251664055718316/476837158203125: {\\"s\\":\\"hh\\",\\"gain\\":0.25}",
-  "251664055718316/476837158203125 -> 19/24: {\\"s\\":\\"hh\\",\\"gain\\":0.25}",
-  "19/24 -> 2922870840145583/2769035532769500: {\\"s\\":\\"hh\\",\\"gain\\":0.25}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 156 https://strudel.cc/?89gJxIK34OPK 1`] = `
-[
-  "0/1 -> 3/2: {\\"s\\":\\"bd\\",\\"speed\\":0.7519542165100574}",
-  "3/4 -> 3/2: {\\"s\\":\\"sd\\",\\"speed\\":0.7931522866332671}",
-  "3/8 -> 3/4: {\\"s\\":\\"hh\\",\\"speed\\":0.7285963821098448}",
-  "3/4 -> 9/8: {\\"s\\":\\"hh\\",\\"speed\\":0.77531205091027}",
-  "0/1 -> 3/2: {\\"n\\":33.129885541275144,\\"decay\\":0.15,\\"sustain\\":0,\\"s\\":\\"sawtooth\\",\\"gain\\":0.4,\\"cutoff\\":3669.6267869262615}",
-  "0/1 -> 3/2: {\\"n\\":33.17988554127514,\\"decay\\":0.15,\\"sustain\\":0,\\"s\\":\\"sawtooth\\",\\"gain\\":0.4,\\"cutoff\\":3669.6267869262615}",
-  "0/1 -> 3/2: {\\"n\\":55.129885541275144,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":59.129885541275144,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":60.129885541275144,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":64.12988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":55.16988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":59.16988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":60.16988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":64.16988554127515,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "3/16 -> 3/8: {\\"n\\":69.01266877519555,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/8 -> 9/16: {\\"n\\":69.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/8 -> 9/16: {\\"n\\":72.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/4 -> 15/16: {\\"n\\":72.16001184806132,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "15/16 -> 9/8: {\\"n\\":72.21301072199333,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/16 -> 3/8: {\\"n\\":69.05266877519557,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/8 -> 9/16: {\\"n\\":69.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/8 -> 9/16: {\\"n\\":72.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/4 -> 15/16: {\\"n\\":72.20001184806131,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "15/16 -> 9/8: {\\"n\\":72.25301072199335,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "0/1 -> 3/16: {\\"n\\":93.00057728554401,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "0/1 -> 3/16: {\\"n\\":93.04057728554402,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "3/8 -> 9/16: {\\"n\\":69.01266877519555,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "9/16 -> 3/4: {\\"n\\":69.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "9/16 -> 3/4: {\\"n\\":72.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "15/16 -> 9/8: {\\"n\\":72.16001184806132,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "3/8 -> 9/16: {\\"n\\":69.05266877519557,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "9/16 -> 3/4: {\\"n\\":69.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "9/16 -> 3/4: {\\"n\\":72.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "15/16 -> 9/8: {\\"n\\":72.20001184806131,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "3/16 -> 3/8: {\\"n\\":93.00057728554401,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "3/16 -> 3/8: {\\"n\\":93.04057728554402,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "9/16 -> 3/4: {\\"n\\":69.01266877519555,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "3/4 -> 15/16: {\\"n\\":69.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "3/4 -> 15/16: {\\"n\\":72.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "9/16 -> 3/4: {\\"n\\":69.05266877519557,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "3/4 -> 15/16: {\\"n\\":69.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "3/4 -> 15/16: {\\"n\\":72.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "0/1 -> 3/16: {\\"n\\":72.0468455057745,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "0/1 -> 3/16: {\\"n\\":93.0468455057745,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "3/8 -> 9/16: {\\"n\\":93.00057728554401,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "0/1 -> 3/16: {\\"n\\":72.0868455057745,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "0/1 -> 3/16: {\\"n\\":93.0868455057745,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "3/8 -> 9/16: {\\"n\\":93.04057728554402,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "3/4 -> 15/16: {\\"n\\":69.01266877519555,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "15/16 -> 9/8: {\\"n\\":69.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "3/4 -> 15/16: {\\"n\\":69.05266877519557,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "15/16 -> 9/8: {\\"n\\":69.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 157 https://strudel.cc/?8g4oMFkLYMXZ 1`] = `
-[
-  "0/1 -> 1/10: C3",
-  "0/1 -> 1/10: E3",
-  "0/1 -> 1/10: G3",
-  "1/4 -> 7/20: B3",
-  "1/4 -> 7/20: E4",
-  "1/4 -> 7/20: E3",
-  "1/2 -> 3/5: C3",
-  "1/2 -> 3/5: A2",
-  "1/2 -> 3/5: C3",
-  "3/4 -> 17/20: E3",
-  "3/4 -> 17/20: G3",
-  "3/4 -> 17/20: B3",
-  "0/1 -> 1/5: C2",
-  "1/2 -> 7/10: E2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 158 https://strudel.cc/?NIQF-VGYdB83 1`] = `
-[
-  "0/1 -> 1/2: c1",
-  "1/2 -> 1/1: c1",
-  "1/2 -> 1/1: x",
-  "1/4 -> 1/2: c4",
-  "3/4 -> 1/1: c4",
-  "0/1 -> 1/2: B1",
-  "3/4 -> 1/1: B1",
-  "1/4 -> 13/44: A3",
-  "1/4 -> 13/44: C#4",
-  "1/4 -> 13/44: D4",
-  "1/4 -> 13/44: F#4",
-]
-`;
-
-exports[`renders shared tunes > shared tune 159 https://strudel.cc/?KOAtvzaJcmmY 1`] = `
-[
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/8 -> 1/4: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "1/8 -> 1/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/8 -> 1/4: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "1/8 -> 1/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/8 -> 1/4: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "1/8 -> 1/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/8 -> 1/4: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "1/8 -> 1/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/8 -> 1/4: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "1/8 -> 1/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/8 -> 1/4: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "1/8 -> 1/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/8 -> 1/4: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "1/8 -> 1/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/8 -> 1/4: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "1/8 -> 1/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 5/8: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 5/8: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 5/8: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 5/8: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 5/8: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 5/8: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 5/8: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 5/8: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 5/8: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 5/8: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 5/8: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 5/8: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 5/8: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 5/8: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 5/8: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 5/8: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "3/4 -> 7/8: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "3/4 -> 7/8: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "3/4 -> 7/8: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "3/4 -> 7/8: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "3/4 -> 7/8: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "3/4 -> 7/8: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "3/4 -> 7/8: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "3/4 -> 7/8: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "3/4 -> 7/8: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "3/4 -> 7/8: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "3/4 -> 7/8: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "3/4 -> 7/8: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "3/4 -> 7/8: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "3/4 -> 7/8: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "3/4 -> 7/8: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "3/4 -> 7/8: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 160 https://strudel.cc/?pK517-FAktOc 1`] = `
-[
-  "0/1 -> 4/3: B4",
-  "0/1 -> 1/3: C3",
-  "1/3 -> 2/3: G3",
-  "2/3 -> 2/1: E4",
-]
-`;
-
-exports[`renders shared tunes > shared tune 161 https://strudel.cc/?H3BbA0AovtKs 1`] = `
-[
-  "0/1 -> 5/26: {\\"note\\":\\"B2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.46759259259259256}",
-  "5/13 -> 15/26: {\\"note\\":\\"B2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.46759259259259256}",
-  "10/13 -> 155/156: {\\"note\\":\\"B2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.46759259259259256}",
-  "155/156 -> 15/13: {\\"note\\":\\"A2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.45833333333333337}",
-  "0/1 -> 15/26: {\\"note\\":\\"B3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5231481481481481}",
-  "5/52 -> 35/52: {\\"note\\":\\"C#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5324074074074074}",
-  "5/26 -> 10/13: {\\"note\\":\\"D#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "15/52 -> 45/52: {\\"note\\":\\"F4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5509259259259259}",
-  "5/13 -> 25/26: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "25/52 -> 55/52: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "15/26 -> 15/13: {\\"note\\":\\"B4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5787037037037037}",
-  "35/52 -> 5/4: {\\"note\\":\\"C#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.587962962962963}",
-  "5/13 -> 25/26: {\\"note\\":\\"B3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5231481481481481}",
-  "25/52 -> 55/52: {\\"note\\":\\"C#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5324074074074074}",
-  "15/26 -> 15/13: {\\"note\\":\\"D#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "35/52 -> 5/4: {\\"note\\":\\"F4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5509259259259259}",
-  "10/13 -> 35/26: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "45/52 -> 75/52: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "25/26 -> 20/13: {\\"note\\":\\"B4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5787037037037037}",
-  "10/13 -> 35/26: {\\"note\\":\\"B3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5231481481481481}",
-  "45/52 -> 75/52: {\\"note\\":\\"C#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5324074074074074}",
-  "25/26 -> 20/13: {\\"note\\":\\"D#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "0/1 -> 80/13: {\\"s\\":\\"mad\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 162 https://strudel.cc/?Y9RZADkxt8UL 1`] = `
-[
-  "0/1 -> 65/12: {\\"n\\":\\"d#5\\",\\"s\\":\\"Piccolo: Pipe\\",\\"gain\\":0.35}",
-  "0/1 -> 65/12: {\\"n\\":56,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.15}",
-  "0/1 -> 65/12: {\\"n\\":60,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.15}",
-  "0/1 -> 65/12: {\\"n\\":63,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.15}",
-  "0/1 -> 65/12: {\\"n\\":68,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.15}",
-  "0/1 -> 65/12: {\\"n\\":72,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.15}",
-  "0/1 -> 65/12: {\\"n\\":63,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.15}",
-  "0/1 -> 39/128: {\\"n\\":\\"G#1\\",\\"s\\":\\"Electric Bass (finger): Bass\\",\\"gain\\":0.3}",
-  "65/192 -> 247/384: {\\"n\\":\\"G#1\\",\\"s\\":\\"Electric Bass (finger): Bass\\",\\"gain\\":0.3}",
-  "65/96 -> 377/384: {\\"n\\":\\"G#1\\",\\"s\\":\\"Electric Bass (finger): Bass\\",\\"gain\\":0.3}",
-  "0/1 -> 65/192: {\\"s\\":\\"bd\\",\\"gain\\":0.2}",
-  "65/192 -> 65/96: {\\"s\\":\\"bd\\",\\"gain\\":0.2}",
-  "65/96 -> 65/48: {\\"s\\":\\"sn\\",\\"gain\\":0.2}",
-  "0/1 -> 65/96: {\\"s\\":\\"hh\\",\\"gain\\":0.2}",
-  "65/96 -> 65/48: {\\"s\\":\\"hh\\",\\"gain\\":0.2}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 163 https://strudel.cc/?bxwipc2kqreB 1`] = `
-[
-  "1/2 -> 1/1: a4",
-  "3/4 -> 1/1: a1",
-  "1/2 -> 3/4: a2",
-  "1/4 -> 1/2: a1",
-  "0/1 -> 1/4: a2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 164 https://strudel.cc/?qGimkQi_nszY 1`] = `
-[
-  "47/60 -> 6157/6000: {\\"n\\":\\"c#5\\",\\"s\\":\\"Overdriven Guitar: Guitar\\",\\"gain\\":0.18}",
-  "47/90 -> 13771/18000: {\\"n\\":\\"d#5\\",\\"s\\":\\"Overdriven Guitar: Guitar\\",\\"gain\\":0.18}",
-  "47/180 -> 9071/18000: {\\"n\\":\\"f5\\",\\"s\\":\\"Overdriven Guitar: Guitar\\",\\"gain\\":0.18}",
-  "0/1 -> 1457/6000: {\\"n\\":\\"g5\\",\\"s\\":\\"Overdriven Guitar: Guitar\\",\\"gain\\":0.18}",
-  "47/60 -> 47/30: {\\"n\\":57,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.24}",
-  "47/60 -> 47/30: {\\"n\\":61,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.24}",
-  "47/60 -> 47/30: {\\"n\\":52,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.24}",
-  "0/1 -> 47/60: {\\"n\\":59,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.24}",
-  "0/1 -> 47/60: {\\"n\\":63,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.24}",
-  "0/1 -> 47/60: {\\"n\\":54,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.24}",
-  "47/60 -> 893/600: {\\"n\\":\\"A1\\",\\"s\\":\\"Electric Bass (finger): Bass\\",\\"gain\\":0.3}",
-  "0/1 -> 141/200: {\\"n\\":\\"B1\\",\\"s\\":\\"Electric Bass (finger): Bass\\",\\"gain\\":0.3}",
-  "47/60 -> 47/45: {\\"s\\":\\"bd\\",\\"gain\\":0.2}",
-  "47/90 -> 47/60: {\\"s\\":\\"sn\\",\\"gain\\":0.2}",
-  "0/1 -> 47/180: {\\"s\\":\\"bd\\",\\"gain\\":0.2}",
-  "47/60 -> 47/45: {\\"s\\":\\"hh\\",\\"gain\\":0.2}",
-  "47/90 -> 47/60: {\\"s\\":\\"hh\\",\\"gain\\":0.2}",
-  "47/180 -> 47/90: {\\"s\\":\\"hh\\",\\"gain\\":0.2}",
-  "0/1 -> 47/180: {\\"s\\":\\"hh\\",\\"gain\\":0.2}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 165 https://strudel.cc/?DVESSaRggtn_ 1`] = `
-[
-  "0/1 -> 6275565/1452119: A3",
-  "-9/8 -> 20400609/11616952: G4",
-  "3/8 -> 54560877/11616952: D4",
-  "-3/4 -> 12378483/5808476: F5",
-  "3/4 -> 29458617/5808476: G4",
-  "0/1 -> 3/2: D2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 166 https://strudel.cc/?CHh9ZGJxiWnm 1`] = `
-[
-  "1/8 -> 1/4: {\\"n\\":\\"D1\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1699.6897509708342}",
-  "1/8 -> 1/4: {\\"n\\":\\"D1\\",\\"s\\":\\"square\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1699.6897509708342}",
-  "3/8 -> 1/2: {\\"n\\":\\"D2\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1765.826371664994}",
-  "3/8 -> 1/2: {\\"n\\":\\"D2\\",\\"s\\":\\"square\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1765.826371664994}",
-  "1/2 -> 5/8: {\\"n\\":\\"D1\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1798.799979846742}",
-  "1/2 -> 5/8: {\\"n\\":\\"D1\\",\\"s\\":\\"square\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1798.799979846742}",
-  "3/4 -> 7/8: {\\"n\\":\\"D3\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1864.4584935007128}",
-  "3/4 -> 7/8: {\\"n\\":\\"D3\\",\\"s\\":\\"square\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1864.4584935007128}",
-  "7/8 -> 1/1: {\\"n\\":\\"D3\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1897.1038487394403}",
-  "7/8 -> 1/1: {\\"n\\":\\"D3\\",\\"s\\":\\"square\\",\\"gain\\":0.3,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.5,\\"cutoff\\":1897.1038487394403}",
-  "-3/8 -> 1/8: {\\"n\\":\\"G3\\",\\"s\\":\\"square\\",\\"gain\\":0.7,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0,\\"cutoff\\":1666.5665766857219}",
-  "-3/8 -> 1/8: {\\"n\\":\\"B3\\",\\"s\\":\\"square\\",\\"gain\\":0.7,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0,\\"cutoff\\":1666.5665766857219}",
-  "-1/4 -> 1/4: {\\"n\\":\\"G3\\",\\"s\\":\\"square\\",\\"gain\\":0.7,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0,\\"cutoff\\":1683.1306585059317}",
-  "-1/4 -> 1/4: {\\"n\\":\\"B3\\",\\"s\\":\\"square\\",\\"gain\\":0.7,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0,\\"cutoff\\":1683.1306585059317}",
-  "-1/8 -> 3/8: {\\"n\\":\\"G3\\",\\"s\\":\\"square\\",\\"gain\\":0.7,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0,\\"cutoff\\":1699.6897509708342}",
-  "-1/8 -> 3/8: {\\"n\\":\\"B3\\",\\"s\\":\\"square\\",\\"gain\\":0.7,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0,\\"cutoff\\":1699.6897509708342}",
-  "0/1 -> 3/8: {\\"n\\":\\"C#6\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.26103468453995016,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5998.072590601808,\\"cutoff\\":4000}",
-  "0/1 -> 3/8: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.26103468453995016,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5998.072590601808,\\"cutoff\\":4000}",
-  "0/1 -> 3/8: {\\"n\\":\\"E5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.26103468453995016,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5998.072590601808,\\"cutoff\\":4000}",
-  "0/1 -> 3/8: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.26103468453995016,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5998.072590601808,\\"cutoff\\":4000}",
-  "3/8 -> 3/4: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2828651860235305,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5982.671142387316,\\"cutoff\\":4000}",
-  "3/8 -> 3/4: {\\"n\\":\\"F#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2828651860235305,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5982.671142387316,\\"cutoff\\":4000}",
-  "3/8 -> 3/4: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2828651860235305,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5982.671142387316,\\"cutoff\\":4000}",
-  "3/8 -> 3/4: {\\"n\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2828651860235305,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5982.671142387316,\\"cutoff\\":4000}",
-  "3/4 -> 1/1: {\\"n\\":\\"F#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.300533478008833,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5958.137268909887,\\"cutoff\\":4000}",
-  "3/4 -> 1/1: {\\"n\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.300533478008833,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5958.137268909887,\\"cutoff\\":4000}",
-  "1/4 -> 5/8: {\\"n\\":\\"C#6\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2756442833140452,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5989.512318936654,\\"cutoff\\":4000}",
-  "1/4 -> 5/8: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2756442833140452,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5989.512318936654,\\"cutoff\\":4000}",
-  "1/4 -> 5/8: {\\"n\\":\\"E5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2756442833140452,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5989.512318936654,\\"cutoff\\":4000}",
-  "1/4 -> 5/8: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2756442833140452,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5989.512318936654,\\"cutoff\\":4000}",
-  "5/8 -> 1/1: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.29705226105983373,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5963.890147645195,\\"cutoff\\":4000}",
-  "5/8 -> 1/1: {\\"n\\":\\"F#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.29705226105983373,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5963.890147645195,\\"cutoff\\":4000}",
-  "5/8 -> 1/1: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.29705226105983373,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5963.890147645195,\\"cutoff\\":4000}",
-  "5/8 -> 1/1: {\\"n\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.29705226105983373,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5963.890147645195,\\"cutoff\\":4000}",
-  "1/2 -> 7/8: {\\"n\\":\\"C#6\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.29000691362123476,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5974.128467049176,\\"cutoff\\":4000}",
-  "1/2 -> 7/8: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.29000691362123476,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5974.128467049176,\\"cutoff\\":4000}",
-  "1/2 -> 7/8: {\\"n\\":\\"E5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.29000691362123476,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5974.128467049176,\\"cutoff\\":4000}",
-  "1/2 -> 7/8: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.29000691362123476,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5974.128467049176,\\"cutoff\\":4000}",
-  "7/8 -> 5/4: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.3107861971007485,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5938.355801271282,\\"cutoff\\":4000}",
-  "7/8 -> 5/4: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.3107861971007485,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5938.355801271282,\\"cutoff\\":4000}",
-  "3/4 -> 9/8: {\\"n\\":\\"C#6\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.30398425548024827,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5951.963201008076,\\"cutoff\\":4000}",
-  "3/4 -> 9/8: {\\"n\\":\\"E5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.30398425548024827,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5951.963201008076,\\"cutoff\\":4000}",
-  "0/1 -> 1/4: {\\"n\\":\\"F#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2573601511491127,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.143312438893,\\"cutoff\\":4000}",
-  "0/1 -> 1/4: {\\"n\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2573601511491127,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.143312438893,\\"cutoff\\":4000}",
-  "-1/8 -> 1/4: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2573601511491127,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.143312438893,\\"cutoff\\":4000}",
-  "-1/8 -> 1/4: {\\"n\\":\\"F#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2573601511491127,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.143312438893,\\"cutoff\\":4000}",
-  "-1/8 -> 1/4: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2573601511491127,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.143312438893,\\"cutoff\\":4000}",
-  "-1/8 -> 1/4: {\\"n\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2573601511491127,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.143312438893,\\"cutoff\\":4000}",
-  "1/4 -> 1/2: {\\"n\\":\\"F#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.27200957116830426,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5992.29333433282,\\"cutoff\\":4000}",
-  "1/4 -> 1/2: {\\"n\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.27200957116830426,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5992.29333433282,\\"cutoff\\":4000}",
-  "-1/4 -> 1/8: {\\"n\\":\\"C#6\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2536811842784369,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.785818935017,\\"cutoff\\":4000}",
-  "-1/4 -> 1/8: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2536811842784369,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.785818935017,\\"cutoff\\":4000}",
-  "-1/4 -> 1/8: {\\"n\\":\\"E5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2536811842784369,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.785818935017,\\"cutoff\\":4000}",
-  "-1/4 -> 1/8: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.2536811842784369,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5999.785818935017,\\"cutoff\\":4000}",
-  "1/8 -> 1/2: {\\"n\\":\\"A5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.26836160127988246,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5994.647308096509,\\"cutoff\\":4000}",
-  "1/8 -> 1/2: {\\"n\\":\\"F#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.26836160127988246,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5994.647308096509,\\"cutoff\\":4000}",
-  "1/8 -> 1/2: {\\"n\\":\\"C#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.26836160127988246,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5994.647308096509,\\"cutoff\\":4000}",
-  "1/8 -> 1/2: {\\"n\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.26836160127988246,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5994.647308096509,\\"cutoff\\":4000}",
-  "1/2 -> 3/4: {\\"n\\":\\"F#5\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.28644702698548963,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5978.612153434527,\\"cutoff\\":4000}",
-  "1/2 -> 3/4: {\\"n\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.28644702698548963,\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":0,\\"hcutoff\\":5978.612153434527,\\"cutoff\\":4000}",
-  "0/1 -> 1/4: bd",
-  "1/2 -> 3/4: bd",
-  "1/2 -> 1/1: sn",
-  "1/4 -> 1/2: hh3",
-  "3/4 -> 1/1: hh3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 167 https://strudel.cc/?7C7fQJ7ENNd3 1`] = `
-[
-  "0/1 -> 1/4: {\\"s\\":\\"hh\\"}",
-  "1/4 -> 1/2: {\\"s\\":\\"hh\\"}",
-  "1/2 -> 3/4: {\\"s\\":\\"hh\\"}",
-  "3/4 -> 1/1: {\\"s\\":\\"hh\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 168 https://strudel.cc/?VGsjmHzmkMz0 1`] = `
-[
-  "1/4 -> 1/2: {\\"s\\":\\"bd\\"}",
-  "0/1 -> 1/4: {\\"s\\":\\"hh\\"}",
-  "1/2 -> 3/4: {\\"s\\":\\"hh\\"}",
-  "3/4 -> 1/1: {\\"s\\":\\"hh\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 169 https://strudel.cc/?4QSBDxgdgAIr 1`] = `
-[
-  "1/4 -> 1/2: {\\"s\\":\\"bd\\"}",
-  "0/1 -> 1/12: {\\"s\\":\\"hh\\"}",
-  "1/12 -> 1/6: {\\"s\\":\\"hh\\"}",
-  "1/6 -> 1/4: {\\"s\\":\\"hh\\"}",
-  "1/2 -> 7/12: {\\"s\\":\\"hh\\"}",
-  "7/12 -> 2/3: {\\"s\\":\\"hh\\"}",
-  "2/3 -> 3/4: {\\"s\\":\\"hh\\"}",
-  "3/4 -> 5/6: {\\"s\\":\\"hh\\"}",
-  "5/6 -> 11/12: {\\"s\\":\\"hh\\"}",
-  "11/12 -> 1/1: {\\"s\\":\\"hh\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 170 https://strudel.cc/?_1ClWbH9kSKC 1`] = `
-[
-  "0/1 -> 2/9: {\\"s\\":\\"hh\\"}",
-  "2/9 -> 4/9: {\\"s\\":\\"hh\\"}",
-  "4/9 -> 2/3: {\\"s\\":\\"hh\\"}",
-  "2/3 -> 7/9: {\\"s\\":\\"hh\\"}",
-  "7/9 -> 8/9: {\\"s\\":\\"hh\\"}",
-  "8/9 -> 1/1: {\\"s\\":\\"hh\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 171 https://strudel.cc/?nmwsMPG16O1L 1`] = `
-[
-  "0/1 -> 1/4: 83.8125",
-  "3/4 -> 1/1: 82.6875",
-  "0/1 -> 5/2: f3",
-  "3/8 -> 23/8: f3",
-  "3/4 -> 13/4: f3",
-  "0/1 -> 40/1: a1",
-  "1/2 -> 1/1: 2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 172 https://strudel.cc/?DBp75NUfSxIn 1`] = `
-[
-  "0/1 -> 1/4: {\\"note\\":57}",
-  "0/1 -> 1/4: {\\"note\\":61}",
-  "0/1 -> 1/4: {\\"note\\":64}",
-  "3/4 -> 1/1: {\\"note\\":57}",
-  "3/4 -> 1/1: {\\"note\\":61}",
-  "3/4 -> 1/1: {\\"note\\":64}",
-  "0/1 -> 1/1: {\\"note\\":45}",
-  "1/4 -> 1/2: 2",
-  "3/4 -> 7/8: 2",
-  "0/1 -> 1/4: c1",
-  "1/2 -> 3/4: c1",
-  "1/2 -> 1/1: x",
-]
-`;
-
-exports[`renders shared tunes > shared tune 173 https://strudel.cc/?bdsxEcjr7fkg 1`] = `
-[
-  "0/1 -> 1/1: {\\"n\\":\\"a1\\",\\"decay\\":0.25,\\"sustain\\":0,\\"s\\":\\"sawtooth\\",\\"gain\\":0.4,\\"vowel\\":\\"a\\"}",
-  "-3/8 -> 1/8: {\\"n\\":52,\\"decay\\":0.25,\\"sustain\\":0,\\"s\\":\\"sawtooth\\",\\"gain\\":0.4,\\"vowel\\":\\"a\\"}",
-  "0/1 -> 1/1: {\\"n\\":33.05,\\"decay\\":0.25,\\"sustain\\":0,\\"s\\":\\"sawtooth\\",\\"gain\\":0.4,\\"vowel\\":\\"a\\"}",
-  "-3/8 -> 1/8: {\\"n\\":52.05,\\"decay\\":0.25,\\"sustain\\":0,\\"s\\":\\"sawtooth\\",\\"gain\\":0.4,\\"vowel\\":\\"a\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 174 https://strudel.cc/?IuUGlGkdiPX- 1`] = `
-[
-  "1/4 -> 1/2: {\\"s\\":\\"hh\\",\\"coarse\\":16,\\"speed\\":0.7285963821098448}",
-  "3/4 -> 1/1: {\\"s\\":\\"hh\\",\\"coarse\\":16,\\"shape\\":0.8,\\"speed\\":0.80224046928206}",
-  "0/1 -> 1/1: {\\"s\\":\\"bd\\",\\"coarse\\":16,\\"shape\\":0.8,\\"crush\\":8,\\"gain\\":0.2,\\"speed\\":0.7519542165100574}",
-  "1/2 -> 1/1: {\\"s\\":\\"sd\\",\\"coarse\\":16,\\"shape\\":0.8,\\"crush\\":8,\\"gain\\":0.2,\\"speed\\":0.7931522866332671}",
-  "1/2 -> 3/4: {\\"s\\":\\"hh\\",\\"coarse\\":16,\\"shape\\":0.8,\\"crush\\":8,\\"gain\\":0.2,\\"speed\\":0.77531205091027}",
-  "0/1 -> 1/8: {\\"note\\":\\"g1\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":622.4281788948767,\\"coarse\\":2,\\"speed\\":0.7002304945137069}",
-  "3/8 -> 1/2: {\\"note\\":\\"g1\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":753.073372946036,\\"coarse\\":4,\\"speed\\":0.7399036937955912}",
-  "3/4 -> 7/8: {\\"note\\":\\"g1\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":866.5386311808015,\\"coarse\\":7,\\"speed\\":0.798840922941892}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 175 https://strudel.cc/?1QH3HPhZ1uad 1`] = `
-[
-  "0/1 -> 1/2: c1",
-  "1/2 -> 1/1: c1",
-  "1/2 -> 1/1: x",
-  "1/4 -> 1/2: c4",
-  "3/4 -> 1/1: c4",
-  "0/1 -> 1/2: B1",
-  "3/4 -> 1/1: B1",
-  "1/4 -> 13/44: A3",
-  "1/4 -> 13/44: C#4",
-  "1/4 -> 13/44: D4",
-  "1/4 -> 13/44: F#4",
-]
-`;
-
-exports[`renders shared tunes > shared tune 176 https://strudel.cc/?hxJZG7SS71HP 1`] = `
-[
-  "0/1 -> 1/2: {\\"note\\":\\"F3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.49537037037037035}",
-  "1/4 -> 3/4: {\\"note\\":\\"F2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.4398148148148148}",
-  "1/2 -> 1/1: {\\"note\\":\\"F3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.49537037037037035}",
-  "1/2 -> 1/1: {\\"note\\":\\"Ab3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5092592592592593}",
-  "1/2 -> 1/1: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "1/2 -> 1/1: {\\"note\\":\\"F2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.4398148148148148}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 177 https://strudel.cc/?EoVX7HjwHB8r 1`] = `
-[
-  "0/1 -> 1/2: Bb2",
-  "0/1 -> 1/2: F3",
-  "0/1 -> 1/2: Bb3",
-  "1/2 -> 1/1: Bb2",
-  "1/2 -> 1/1: Bb2",
-  "1/2 -> 1/1: F3",
-  "1/2 -> 1/1: F3",
-  "1/2 -> 1/1: Bb3",
-  "1/2 -> 1/1: Bb3",
-  "0/1 -> 1/2: Bb1",
-  "1/2 -> 5/8: Bb1",
-  "3/4 -> 7/8: Bb1",
-  "0/1 -> 1/2: c1",
-  "1/2 -> 1/1: c1",
-  "1/2 -> 1/1: c3",
-  "0/1 -> 1/4: C1",
-  "1/4 -> 1/2: C3",
-  "1/2 -> 3/4: C1",
-  "3/4 -> 1/1: C3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 178 https://strudel.cc/?tVIePZOlbUFE 1`] = `
-[
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/8 -> 1/4: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "1/8 -> 1/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/8 -> 1/4: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "1/8 -> 1/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/8 -> 1/4: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "1/8 -> 1/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/8 -> 1/4: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "1/8 -> 1/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/8 -> 1/4: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "1/8 -> 1/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/8 -> 1/4: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "1/8 -> 1/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/8 -> 1/4: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "1/8 -> 1/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/8 -> 1/4: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "1/8 -> 1/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"A#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"D#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "446428571428571/12500000000000000 -> 3571428571428571/12500000000000000: {\\"note\\":\\"G#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6203703703703703}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 5/8: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 5/8: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 5/8: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 5/8: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 5/8: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 5/8: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 5/8: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 5/8: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 5/8: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 5/8: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 5/8: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 5/8: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 5/8: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 5/8: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 5/8: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 5/8: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "1/2 -> 3/4: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "1/2 -> 3/4: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "1/2 -> 3/4: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/2 -> 3/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-  "3/4 -> 7/8: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "3/4 -> 7/8: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "3/4 -> 7/8: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "3/4 -> 7/8: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "3/4 -> 7/8: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "3/4 -> 7/8: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "3/4 -> 7/8: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "3/4 -> 7/8: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "3/4 -> 7/8: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "3/4 -> 7/8: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "3/4 -> 7/8: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "3/4 -> 7/8: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "3/4 -> 7/8: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "3/4 -> 7/8: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "3/4 -> 7/8: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "3/4 -> 7/8: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"D5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5925925925925926}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"Eb5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5972222222222222}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-  "2455357142857143/3125000000000000 -> 3236607142857143/3125000000000000: {\\"note\\":\\"G5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6157407407407407}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 179 https://strudel.cc/?P_Fi2yRHrXHj 1`] = `
-[
-  "0/1 -> 1/8: {\\"freq\\":55.33,\\"s\\":\\"sawtooth\\"}",
-  "0/1 -> 1/8: {\\"freq\\":54.725,\\"s\\":\\"sawtooth\\"}",
-  "3/8 -> 1/2: {\\"freq\\":110.66,\\"s\\":\\"sawtooth\\"}",
-  "3/8 -> 1/2: {\\"freq\\":109.45,\\"s\\":\\"sawtooth\\"}",
-  "3/8 -> 1/2: {\\"freq\\":165.99,\\"s\\":\\"sawtooth\\"}",
-  "3/8 -> 1/2: {\\"freq\\":164.175,\\"s\\":\\"sawtooth\\"}",
-  "3/4 -> 7/8: {\\"freq\\":221.32,\\"s\\":\\"sawtooth\\"}",
-  "3/4 -> 7/8: {\\"freq\\":218.9,\\"s\\":\\"sawtooth\\"}",
-  "3/4 -> 7/8: {\\"freq\\":276.65,\\"s\\":\\"sawtooth\\"}",
-  "3/4 -> 7/8: {\\"freq\\":273.625,\\"s\\":\\"sawtooth\\"}",
-  "1/8 -> 59/400: {\\"freq\\":440,\\"gain\\":0.206361035083454,\\"s\\":\\"sawtooth\\"}",
-  "1/4 -> 109/400: {\\"freq\\":440,\\"gain\\":0.2360775017902398,\\"s\\":\\"sawtooth\\"}",
-  "1/2 -> 209/400: {\\"freq\\":440,\\"gain\\":0.3624358861780295,\\"s\\":\\"sawtooth\\"}",
-  "5/8 -> 259/400: {\\"freq\\":440,\\"gain\\":0.4316442271311083,\\"s\\":\\"sawtooth\\"}",
-  "7/8 -> 359/400: {\\"freq\\":440,\\"gain\\":0.5078844826422588,\\"s\\":\\"sawtooth\\"}",
-  "0/1 -> 1/8: {\\"s\\":\\"bd\\"}",
-  "3/8 -> 1/2: {\\"s\\":\\"bd\\"}",
-  "3/4 -> 7/8: {\\"s\\":\\"bd\\"}",
-  "0/1 -> 1/4: {\\"s\\":\\"hh\\"}",
-  "1/4 -> 1/2: {\\"s\\":\\"hh\\"}",
-  "1/2 -> 3/4: {\\"s\\":\\"hh\\"}",
-  "3/4 -> 1/1: {\\"s\\":\\"hh\\"}",
-  "1/2 -> 1/1: {\\"s\\":\\"sd\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 180 https://strudel.cc/?brh8FpBbbH-- 1`] = `
-[
-  "0/1 -> 1/1: {\\"s\\":\\"bd\\"}",
-  "1/2 -> 1/1: {\\"s\\":\\"sd\\"}",
-  "1/4 -> 1/2: {\\"s\\":\\"hh\\"}",
-  "1/2 -> 3/4: {\\"s\\":\\"hh\\"}",
-  "3/4 -> 1/1: {\\"s\\":\\"hh\\"}",
-  "0/1 -> 1/2: {\\"note\\":\\"A2\\",\\"s\\":\\"sawtooth\\"}",
-  "1/2 -> 3/4: {\\"note\\":\\"G2\\",\\"s\\":\\"sawtooth\\"}",
-  "3/4 -> 1/1: {\\"note\\":\\"F2\\",\\"s\\":\\"sawtooth\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 181 https://strudel.cc/?Uw7K4l1pIVUt 1`] = `
-[
-  "0/1 -> 1/3: bd",
-  "1/3 -> 2/3: hh",
-  "2/3 -> 1/1: sn",
-  "0/1 -> 1/20: G4",
-  "1/6 -> 13/60: G4",
-  "1/3 -> 23/60: B3",
-  "1/2 -> 11/20: B3",
-  "1/3 -> 23/60: E4",
-  "1/2 -> 11/20: E4",
-  "2/3 -> 43/60: G3",
-  "5/6 -> 53/60: G3",
-  "0/1 -> 4/3: c2",
-  "0/1 -> 4/3: c2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 182 https://strudel.cc/?dhBbMccpPgg8 1`] = `
-[
-  "0/1 -> 1/2: A3",
-  "1/2 -> 3/4: D4",
-  "3/4 -> 1/1: E4",
-  "0/1 -> 1/2: D4",
-  "1/2 -> 3/4: G4",
-  "3/4 -> 1/1: A4",
-]
-`;
-
-exports[`renders shared tunes > shared tune 183 https://strudel.cc/?U5sIL_DhqTip 1`] = `
-[
-  "-1666666666666667/7500000000000000 -> 2/9: G3",
-  "0/1 -> 4/3: E3",
-  "0/1 -> 4/3: A3",
-  "0/1 -> 4/3: D4",
-  "0/1 -> 4/3: G4",
-  "0/1 -> 4/3: B4",
-  "0/1 -> 2/3: D2",
-  "2/3 -> 7/9: D2",
-  "8/9 -> 1/1: D2",
-  "0/1 -> 2/9: c1",
-  "2/9 -> 4/9: c1",
-  "4/9 -> 2/3: c1",
-  "2/3 -> 8/9: c1",
-  "8/9 -> 10/9: c1",
-  "2/3 -> 4/3: c3",
-  "0/1 -> 10/9: c1",
-  "0/1 -> 16/3: F3",
-  "0/1 -> 16/3: A3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 184 https://strudel.cc/?irMD_KH0ICbf 1`] = `
-[
-  "0/1 -> 27/40: {\\"note\\":\\"Db4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5324074074074074}",
-  "0/1 -> 27/40: {\\"note\\":\\"Ab4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5648148148148149}",
-  "0/1 -> 27/40: {\\"note\\":\\"Db4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5324074074074074}",
-  "0/1 -> 27/40: {\\"note\\":\\"Ab4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5648148148148149}",
-  "0/1 -> 27/40: {\\"note\\":\\"Db4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5324074074074074}",
-  "0/1 -> 27/40: {\\"note\\":\\"Ab4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5648148148148149}",
-  "0/1 -> 27/40: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "0/1 -> 27/40: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "0/1 -> 27/40: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "0/1 -> 27/40: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "0/1 -> 27/40: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "0/1 -> 27/40: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "0/1 -> 27/40: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "0/1 -> 27/40: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "0/1 -> 27/40: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "0/1 -> 27/40: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "0/1 -> 27/40: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "0/1 -> 27/40: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "0/1 -> 27/40: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "0/1 -> 27/40: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "0/1 -> 27/40: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "0/1 -> 27/40: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "0/1 -> 27/40: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "0/1 -> 27/40: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "0/1 -> 27/40: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "0/1 -> 27/40: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "0/1 -> 27/40: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "0/1 -> 27/40: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "0/1 -> 27/40: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "0/1 -> 27/40: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "0/1 -> 171/160: {\\"note\\":\\"Bb2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.46296296296296297}",
-  "3/4 -> 33/40: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "3/4 -> 33/40: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "3/4 -> 33/40: {\\"note\\":\\"Eb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "3/4 -> 33/40: {\\"note\\":\\"Bb4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5740740740740741}",
-  "0/1 -> 171/160: {\\"note\\":\\"Bb2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.46296296296296297}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 185 https://strudel.cc/?A6Mqjuhn1Wpr 1`] = `[]`;
-
-exports[`renders shared tunes > shared tune 186 https://strudel.cc/?2-JbRPIoRj7X 1`] = `[]`;
-
-exports[`renders shared tunes > shared tune 187 https://strudel.cc/?wVDgPVVgbrSK 1`] = `[]`;
-
-exports[`renders shared tunes > shared tune 188 https://strudel.cc/?z0OoCML7DPQb 1`] = `
-[
-  "0/1 -> 1/1: bd",
-  "0/1 -> 1/4: hh",
-  "1/4 -> 1/2: hh",
-  "1/2 -> 3/4: hh",
-  "3/4 -> 1/1: hh",
-  "1/2 -> 1/1: sn",
-]
-`;
-
-exports[`renders shared tunes > shared tune 189 https://strudel.cc/?SWekIFXDlrLE 1`] = `
-[
-  "0/1 -> 1/4: {\\"note\\":\\"e4\\"}",
-  "1/4 -> 1/2: {\\"note\\":\\"c4\\"}",
-  "1/2 -> 3/4: {\\"note\\":\\"a4\\"}",
-  "3/4 -> 1/1: {\\"note\\":\\"c4\\"}",
-  "0/1 -> 1/2: {\\"note\\":\\"c1\\"}",
-  "1/2 -> 1/1: {\\"note\\":\\"c1\\"}",
-  "1/2 -> 1/1: {\\"note\\":\\"x\\"}",
-  "1/4 -> 1/2: {\\"note\\":\\"c4\\"}",
-  "3/4 -> 1/1: {\\"note\\":\\"c4\\"}",
-  "0/1 -> 2/1: {\\"note\\":\\"B1\\"}",
-  "0/1 -> 4/1: {\\"note\\":\\"A3\\"}",
-  "0/1 -> 4/1: {\\"note\\":\\"C4\\"}",
-  "0/1 -> 4/1: {\\"note\\":\\"E4\\"}",
-  "0/1 -> 4/1: {\\"note\\":\\"A5\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 190 https://strudel.cc/?70M98P_ZVSJe 1`] = `
-[
-  "0/1 -> 1/2: {\\"s\\":\\"hh\\",\\"begin\\":0,\\"end\\":0.25}",
-  "1/2 -> 1/1: {\\"s\\":\\"hh\\",\\"begin\\":0.25,\\"end\\":0.5}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 191 https://strudel.cc/?SB-hFm0uROHV 1`] = `
-[
-  "0/1 -> 1/1: {\\"s\\":\\"hh\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 192 https://strudel.cc/?t2KXoS_qssjD 1`] = `
-[
-  "0/1 -> 1/4: {\\"s\\":\\"p\\",\\"begin\\":0,\\"end\\":0.0078125,\\"speed\\":0.03125,\\"unit\\":\\"c\\",\\"pan\\":0,\\"shape\\":0.5}",
-  "1/4 -> 1/2: {\\"s\\":\\"p\\",\\"begin\\":0.0078125,\\"end\\":0.015625,\\"speed\\":0.03125,\\"unit\\":\\"c\\",\\"pan\\":0,\\"shape\\":0.5}",
-  "1/2 -> 3/4: {\\"s\\":\\"p\\",\\"begin\\":0.015625,\\"end\\":0.0234375,\\"speed\\":0.03125,\\"unit\\":\\"c\\",\\"pan\\":0,\\"shape\\":0.5}",
-  "3/4 -> 1/1: {\\"s\\":\\"p\\",\\"begin\\":0.0234375,\\"end\\":0.03125,\\"speed\\":0.03125,\\"unit\\":\\"c\\",\\"pan\\":0,\\"shape\\":0.5}",
-  "3/4 -> 1/1: {\\"s\\":\\"p\\",\\"begin\\":0,\\"end\\":0.0078125,\\"speed\\":0.03125,\\"unit\\":\\"c\\",\\"pan\\":1,\\"shape\\":0.5}",
-  "1/2 -> 3/4: {\\"s\\":\\"p\\",\\"begin\\":0.0078125,\\"end\\":0.015625,\\"speed\\":0.03125,\\"unit\\":\\"c\\",\\"pan\\":1,\\"shape\\":0.5}",
-  "1/4 -> 1/2: {\\"s\\":\\"p\\",\\"begin\\":0.015625,\\"end\\":0.0234375,\\"speed\\":0.03125,\\"unit\\":\\"c\\",\\"pan\\":1,\\"shape\\":0.5}",
-  "0/1 -> 1/4: {\\"s\\":\\"p\\",\\"begin\\":0.0234375,\\"end\\":0.03125,\\"speed\\":0.03125,\\"unit\\":\\"c\\",\\"pan\\":1,\\"shape\\":0.5}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 193 https://strudel.cc/?k0435I3IQEH4 1`] = `
-[
-  "0/1 -> 3/4: F3",
-  "3/4 -> 9/8: Ab3",
-  "0/1 -> 3/4: Ab3",
-  "3/4 -> 9/8: C4",
-  "3/8 -> 15/32: Eb4",
-  "9/16 -> 21/32: Eb4",
-  "3/8 -> 15/32: G4",
-  "9/16 -> 21/32: G4",
-  "241/600 -> 147/200: F1",
-  "0/1 -> 3/4: c2",
-  "3/4 -> 3/2: c2",
-  "3/4 -> 3/2: c2",
-  "0/1 -> 3/8: c4",
-  "3/8 -> 3/4: c4",
-  "3/4 -> 9/8: c4",
-]
-`;
-
-exports[`renders shared tunes > shared tune 194 https://strudel.cc/?vDsUyH8IUJn6 1`] = `
-[
-  "0/1 -> 6/1: F3",
-  "0/1 -> 6/1: Ab3",
-  "0/1 -> 6/1: c2",
-  "0/1 -> 3/1: c4",
-]
-`;
-
-exports[`renders shared tunes > shared tune 195 https://strudel.cc/?YJ2iESN49BD6 1`] = `
-[
-  "0/1 -> 3/16: {\\"s\\":\\"bd\\",\\"gain\\":0.7}",
-  "3/16 -> 3/8: {\\"s\\":\\"bd\\",\\"gain\\":0.7}",
-  "3/8 -> 3/4: {\\"s\\":\\"hh\\",\\"gain\\":0.7}",
-  "3/4 -> 9/8: {\\"s\\":\\"sn\\",\\"gain\\":0.7}",
-  "0/1 -> 3/20: {\\"note\\":\\"C2\\",\\"s\\":\\"square\\",\\"cutoff\\":400,\\"decay\\":0.12,\\"sustain\\":0}",
-  "3/8 -> 21/40: {\\"note\\":\\"A1\\",\\"s\\":\\"square\\",\\"cutoff\\":400,\\"decay\\":0.12,\\"sustain\\":0}",
-  "3/4 -> 9/10: {\\"note\\":\\"Bb1\\",\\"s\\":\\"square\\",\\"cutoff\\":400,\\"decay\\":0.12,\\"sustain\\":0}",
-  "3/16 -> 27/80: {\\"note\\":\\"C2\\",\\"s\\":\\"square\\",\\"cutoff\\":400,\\"decay\\":0.12,\\"sustain\\":0}",
-  "9/16 -> 57/80: {\\"note\\":\\"A1\\",\\"s\\":\\"square\\",\\"cutoff\\":400,\\"decay\\":0.12,\\"sustain\\":0}",
-  "15/16 -> 87/80: {\\"note\\":\\"Bb1\\",\\"s\\":\\"square\\",\\"cutoff\\":400,\\"decay\\":0.12,\\"sustain\\":0}",
-  "0/1 -> 3/20: {\\"note\\":\\"G2\\"}",
-  "0/1 -> 3/40: {\\"note\\":\\"C3\\"}",
-  "3/4 -> 33/40: {\\"note\\":\\"Eb3\\"}",
-  "-15/16 -> -63/80: {\\"note\\":\\"G3\\"}",
-  "-3/16 -> -9/80: {\\"note\\":\\"Eb4\\"}",
-  "3/16 -> 27/80: {\\"note\\":\\"G3\\"}",
-  "3/16 -> 21/80: {\\"note\\":\\"C4\\"}",
-  "15/16 -> 81/80: {\\"note\\":\\"Eb4\\"}",
-  "-3/4 -> -3/5: {\\"note\\":\\"G4\\"}",
-  "0/1 -> 3/40: {\\"note\\":\\"Eb5\\"}",
-  "3/8 -> 21/40: {\\"note\\":\\"G4\\"}",
-  "3/8 -> 9/20: {\\"note\\":\\"C5\\"}",
-  "-9/16 -> -33/80: {\\"note\\":\\"G5\\"}",
-  "-9/16 -> -39/80: {\\"note\\":\\"C6\\"}",
-  "3/16 -> 21/80: {\\"note\\":\\"Eb6\\"}",
-  "9/16 -> 57/80: {\\"note\\":\\"G5\\"}",
-  "9/16 -> 51/80: {\\"note\\":\\"C6\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 196 https://strudel.cc/?Z6fHLg-51AUc 1`] = `
-[
-  "0/1 -> 1/4: C3",
-  "0/1 -> 1/4: G3",
-  "0/1 -> 1/4: C4",
-  "1/2 -> 3/4: C3",
-  "1/2 -> 3/4: G3",
-  "1/2 -> 3/4: C4",
-  "0/1 -> 1/2: c2",
-  "1/2 -> 5/8: c2",
-  "3/4 -> 7/8: c2",
-  "0/1 -> 1/2: c1",
-  "1/2 -> 1/1: c1",
-]
-`;
-
-exports[`renders shared tunes > shared tune 197 https://strudel.cc/?GW0d4wRtDmED 1`] = `
-[
-  "0/1 -> 1/2: c1",
-  "1/2 -> 1/1: c1",
-  "1/2 -> 1/1: c3",
-  "0/1 -> 1/4: C1",
-  "1/4 -> 1/2: C3",
-  "1/2 -> 3/4: C1",
-  "3/4 -> 1/1: C3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 198 https://strudel.cc/?iliL_rgeboIg 1`] = `
-[
-  "0/1 -> 1/3: bd",
-  "1/3 -> 2/3: hh",
-  "2/3 -> 1/1: sn",
-  "0/1 -> 1/20: G4",
-  "1/6 -> 13/60: G4",
-  "1/3 -> 23/60: B3",
-  "1/2 -> 11/20: B3",
-  "1/3 -> 23/60: E4",
-  "1/2 -> 11/20: E4",
-  "2/3 -> 43/60: G3",
-  "5/6 -> 53/60: G3",
-  "0/1 -> 4/3: c2",
-  "0/1 -> 4/3: c2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 199 https://strudel.cc/?IVv5q7W4BDiN 1`] = `
-[
-  "0/1 -> 1/32: {\\"note\\":48.07362922971432,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "1/32 -> 1/16: {\\"note\\":48.220843337648155,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "1/16 -> 3/32: {\\"note\\":48.36792441781325,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "3/32 -> 1/8: {\\"note\\":48.51478387406664,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "1/8 -> 5/32: {\\"note\\":48.661333243763295,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "5/32 -> 3/16: {\\"note\\":48.80748425104276,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "3/16 -> 7/32: {\\"note\\":48.95314886000317,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "7/32 -> 1/4: {\\"note\\":49.098239327730845,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "1/4 -> 9/32: {\\"note\\":49.24266825715331,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "9/32 -> 5/16: {\\"note\\":49.386348649684024,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "5/16 -> 11/32: {\\"note\\":49.529193957627086,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "11/32 -> 3/8: {\\"note\\":49.67111813631032,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "3/8 -> 13/32: {\\"note\\":49.81203569591537,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "13/32 -> 7/16: {\\"note\\":49.95186175297358,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "7/16 -> 15/32: {\\"note\\":50.09051208149661,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "15/32 -> 1/2: {\\"note\\":50.22790316371103,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "1/2 -> 17/32: {\\"note\\":50.36395224036629,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "17/32 -> 9/16: {\\"note\\":50.49857736058583,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "9/16 -> 19/32: {\\"note\\":50.63169743123117,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "19/32 -> 5/8: {\\"note\\":50.76323226574944,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "5/8 -> 21/32: {\\"note\\":50.893102632474736,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "21/32 -> 11/16: {\\"note\\":51.021230302354304,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "11/16 -> 23/32: {\\"note\\":51.14753809607082,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "23/32 -> 3/4: {\\"note\\":51.27194993053228,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "3/4 -> 25/32: {\\"note\\":51.39439086470168,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "25/32 -> 13/16: {\\"note\\":51.514787144738634,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "13/16 -> 27/32: {\\"note\\":51.633066248425955,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "27/32 -> 7/8: {\\"note\\":51.74915692885432,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "7/8 -> 29/32: {\\"note\\":51.86298925733875,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "29/32 -> 15/16: {\\"note\\":51.97449466554103,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "15/16 -> 31/32: {\\"note\\":52.08360598677272,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "31/32 -> 1/1: {\\"note\\":52.19025749645384,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 200 https://strudel.cc/?N6kOKngern0Y 1`] = `
-[
-  "0/1 -> 1/32: {\\"note\\":56.147247371137475,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "1/32 -> 1/16: {\\"note\\":56.441387381598005,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "1/16 -> 3/32: {\\"note\\":56.734464051195296,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "3/32 -> 1/8: {\\"note\\":57.02577133256181,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "1/8 -> 5/32: {\\"note\\":57.31460744094122,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "5/32 -> 3/16: {\\"note\\":57.60027654484939,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "3/16 -> 7/32: {\\"note\\":57.88209044239335,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "7/32 -> 1/4: {\\"note\\":58.15937021920993,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "1/4 -> 9/32: {\\"note\\":58.431447884029936,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "9/32 -> 5/16: {\\"note\\":58.69766797792764,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "5/16 -> 11/32: {\\"note\\":58.9573891533787,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "11/32 -> 3/8: {\\"note\\":59.20998571932258,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "3/8 -> 13/32: {\\"note\\":59.45484914850707,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "13/32 -> 7/16: {\\"note\\":59.69138954348376,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "7/16 -> 15/32: {\\"note\\":59.91903705772266,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "15/32 -> 1/2: {\\"note\\":60.1372432684224,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "1/2 -> 17/32: {\\"note\\":60.3454824977088,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "17/32 -> 9/16: {\\"note\\":60.543253079038905,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "9/16 -> 19/32: {\\"note\\":60.73007856575964,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "19/32 -> 5/8: {\\"note\\":60.9055088789095,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "5/8 -> 21/32: {\\"note\\":61.06912139149824,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "21/32 -> 11/16: {\\"note\\":61.22052194665227,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "11/16 -> 23/32: {\\"note\\":61.35934580717309,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "23/32 -> 3/4: {\\"note\\":61.48525853422119,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "3/4 -> 25/32: {\\"note\\":61.597956793008436,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "25/32 -> 13/16: {\\"note\\":61.69716908355822,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "13/16 -> 27/32: {\\"note\\":61.782656394772644,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "27/32 -> 7/8: {\\"note\\":61.85421278023117,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "7/8 -> 29/32: {\\"note\\":61.91166585433365,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "29/32 -> 15/16: {\\"note\\":61.95487720759226,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "15/16 -> 31/32: {\\"note\\":61.983742740072145,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "31/32 -> 1/1: {\\"note\\":61.998192912177224,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 201 https://strudel.cc/?wIjKrvTVPfgZ 1`] = `
-[
-  "0/1 -> 1/16: {\\"note\\":47.370882377028465,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "1/16 -> 1/8: {\\"note\\":47.10302542895079,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "1/8 -> 3/16: {\\"note\\":49.174072265625,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "3/16 -> 1/4: {\\"note\\":49.72477217763662,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "1/4 -> 5/16: {\\"note\\":50.367317005991936,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "5/16 -> 3/8: {\\"note\\":46.19376839697361,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "3/8 -> 7/16: {\\"note\\":51.18686657398939,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "7/16 -> 1/2: {\\"note\\":50.02532958984375,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "1/2 -> 9/16: {\\"note\\":52.08789586275816,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "9/16 -> 5/8: {\\"note\\":52.430519320070744,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "5/8 -> 11/16: {\\"note\\":47.17999421060085,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "11/16 -> 3/4: {\\"note\\":42.378508776426315,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "3/4 -> 13/16: {\\"note\\":42.11755297333002,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "13/16 -> 7/8: {\\"note\\":44.461274698376656,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "7/8 -> 15/16: {\\"note\\":52.89178837090731,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-  "15/16 -> 1/1: {\\"note\\":49.39466518163681,\\"attack\\":0,\\"release\\":0,\\"s\\":\\"triangle\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 202 https://strudel.cc/?iqZ-ex573FFd 1`] = `
-[
-  "0/1 -> 4/25: 52",
-  "4/25 -> 8/25: 57",
-  "8/25 -> 12/25: 61",
-  "12/25 -> 16/25: 52",
-  "16/25 -> 4/5: 57",
-  "4/5 -> 24/25: 61",
-  "24/25 -> 28/25: 52",
-]
-`;
-
-exports[`renders shared tunes > shared tune 203 https://strudel.cc/?0nlMXAIzgsdw 1`] = `
-[
-  "4/5 -> 16/15: {\\"note\\":\\"a6\\",\\"s\\":\\"piano\\"}",
-  "0/1 -> 4/5: {\\"note\\":\\"ab5\\",\\"s\\":\\"piano\\"}",
-  "0/1 -> 4/5: {\\"note\\":\\"e5\\",\\"s\\":\\"piano\\"}",
-  "0/1 -> 4/5: {\\"note\\":\\"c5\\",\\"s\\":\\"piano\\"}",
-  "0/1 -> 4/5: {\\"note\\":\\"Ab5\\",\\"s\\":\\"piano\\"}",
-  "4/5 -> 8/5: {\\"note\\":\\"Db5\\",\\"s\\":\\"piano\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 204 https://strudel.cc/?-4PvWekokc4W 1`] = `
-[
-  "0/1 -> 1/8: {\\"s\\":\\"p\\",\\"speed\\":0.03125,\\"unit\\":\\"c\\",\\"begin\\":0,\\"end\\":0.0078125,\\"pan\\":0,\\"shape\\":0.4,\\"decay\\":0.1,\\"sustain\\":0.4}",
-  "1/8 -> 1/4: {\\"s\\":\\"p\\",\\"speed\\":0.03125,\\"unit\\":\\"c\\",\\"begin\\":0,\\"end\\":0.0078125,\\"pan\\":0,\\"shape\\":0.4,\\"decay\\":0.1,\\"sustain\\":0.4}",
-  "1/4 -> 3/8: {\\"s\\":\\"p\\",\\"speed\\":0.03125,\\"unit\\":\\"c\\",\\"begin\\":0.0078125,\\"end\\":0.015625,\\"pan\\":0,\\"shape\\":0.4,\\"decay\\":0.1,\\"sustain\\":0.4}",
-  "3/8 -> 1/2: {\\"s\\":\\"p\\",\\"speed\\":0.03125,\\"unit\\":\\"c\\",\\"begin\\":0.0078125,\\"end\\":0.015625,\\"pan\\":0,\\"shape\\":0.4,\\"decay\\":0.1,\\"sustain\\":0.4}",
-  "1/2 -> 5/8: {\\"s\\":\\"p\\",\\"speed\\":0.03125,\\"unit\\":\\"c\\",\\"begin\\":0.015625,\\"end\\":0.0234375,\\"pan\\":0,\\"shape\\":0.4,\\"decay\\":0.1,\\"sustain\\":0.4}",
-  "5/8 -> 3/4: {\\"s\\":\\"p\\",\\"speed\\":0.03125,\\"unit\\":\\"c\\",\\"begin\\":0.015625,\\"end\\":0.0234375,\\"pan\\":0,\\"shape\\":0.4,\\"decay\\":0.1,\\"sustain\\":0.4}",
-  "3/4 -> 7/8: {\\"s\\":\\"p\\",\\"speed\\":0.03125,\\"unit\\":\\"c\\",\\"begin\\":0.0234375,\\"end\\":0.03125,\\"pan\\":0,\\"shape\\":0.4,\\"decay\\":0.1,\\"sustain\\":0.4}",
-  "7/8 -> 1/1: {\\"s\\":\\"p\\",\\"speed\\":0.03125,\\"unit\\":\\"c\\",\\"begin\\":0.0234375,\\"end\\":0.03125,\\"pan\\":0,\\"shape\\":0.4,\\"decay\\":0.1,\\"sustain\\":0.4}",
-  "7/8 -> 1/1: {\\"s\\":\\"p\\",\\"speed\\":0.03125,\\"unit\\":\\"c\\",\\"begin\\":0,\\"end\\":0.0078125,\\"pan\\":1,\\"shape\\":0.4,\\"decay\\":0.1,\\"sustain\\":0.4}",
-  "3/4 -> 7/8: {\\"s\\":\\"p\\",\\"speed\\":0.03125,\\"unit\\":\\"c\\",\\"begin\\":0,\\"end\\":0.0078125,\\"pan\\":1,\\"shape\\":0.4,\\"decay\\":0.1,\\"sustain\\":0.4}",
-  "5/8 -> 3/4: {\\"s\\":\\"p\\",\\"speed\\":0.03125,\\"unit\\":\\"c\\",\\"begin\\":0.0078125,\\"end\\":0.015625,\\"pan\\":1,\\"shape\\":0.4,\\"decay\\":0.1,\\"sustain\\":0.4}",
-  "1/2 -> 5/8: {\\"s\\":\\"p\\",\\"speed\\":0.03125,\\"unit\\":\\"c\\",\\"begin\\":0.0078125,\\"end\\":0.015625,\\"pan\\":1,\\"shape\\":0.4,\\"decay\\":0.1,\\"sustain\\":0.4}",
-  "3/8 -> 1/2: {\\"s\\":\\"p\\",\\"speed\\":0.03125,\\"unit\\":\\"c\\",\\"begin\\":0.015625,\\"end\\":0.0234375,\\"pan\\":1,\\"shape\\":0.4,\\"decay\\":0.1,\\"sustain\\":0.4}",
-  "1/4 -> 3/8: {\\"s\\":\\"p\\",\\"speed\\":0.03125,\\"unit\\":\\"c\\",\\"begin\\":0.015625,\\"end\\":0.0234375,\\"pan\\":1,\\"shape\\":0.4,\\"decay\\":0.1,\\"sustain\\":0.4}",
-  "1/8 -> 1/4: {\\"s\\":\\"p\\",\\"speed\\":0.03125,\\"unit\\":\\"c\\",\\"begin\\":0.0234375,\\"end\\":0.03125,\\"pan\\":1,\\"shape\\":0.4,\\"decay\\":0.1,\\"sustain\\":0.4}",
-  "0/1 -> 1/8: {\\"s\\":\\"p\\",\\"speed\\":0.03125,\\"unit\\":\\"c\\",\\"begin\\":0.0234375,\\"end\\":0.03125,\\"pan\\":1,\\"shape\\":0.4,\\"decay\\":0.1,\\"sustain\\":0.4}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 205 https://strudel.cc/?norqcTA-uOs0 1`] = `
-[
-  "0/1 -> 44/75: {\\"note\\":78,\\"s\\":\\"piano\\"}",
-  "44/75 -> 88/75: {\\"note\\":71,\\"s\\":\\"piano\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 206 https://strudel.cc/?WrN_Cv-hQMo0 1`] = `
-[
-  "0/1 -> 1/4: {\\"n\\":\\"c3\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":0.9}",
-  "1/4 -> 1/2: {\\"n\\":\\"eb3\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":0.9}",
-  "1/2 -> 3/4: {\\"n\\":\\"g3\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":0.9}",
-  "3/4 -> 1/1: {\\"n\\":\\"g2\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":0.9}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 207 https://strudel.cc/?YFbUtVxvA82E 1`] = `
-[
-  "0/1 -> 1/1: {\\"n\\":\\"[object Object][object Object]\\",\\"s\\":\\"sawtooth\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 208 https://strudel.cc/?SHdla152eDum 1`] = `
-[
-  "0/1 -> 3/13: {\\"n\\":\\"c3\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.1,\\"sustain\\":0.4,\\"release\\":1}",
-  "3/13 -> 6/13: {\\"n\\":\\"eb3\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.1,\\"sustain\\":0.4,\\"release\\":1}",
-  "6/13 -> 9/13: {\\"n\\":\\"g3\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.1,\\"sustain\\":0.4,\\"release\\":1}",
-  "9/13 -> 12/13: {\\"n\\":\\"f3\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.1,\\"sustain\\":0.4,\\"release\\":1}",
-  "12/13 -> 15/13: {\\"n\\":\\"ab3\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.1,\\"sustain\\":0.4,\\"release\\":1}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 209 https://strudel.cc/?Jk_4KtRME5zL 1`] = `
-[
-  "0/1 -> 1/10: {\\"n\\":\\"c3\\",\\"s\\":\\"sawtooth\\"}",
-  "1/10 -> 1/5: {\\"n\\":\\"eb3\\",\\"s\\":\\"sawtooth\\"}",
-  "1/5 -> 3/10: {\\"n\\":\\"g3\\",\\"s\\":\\"sawtooth\\"}",
-  "3/10 -> 2/5: {\\"n\\":\\"g2\\",\\"s\\":\\"sawtooth\\"}",
-  "2/5 -> 1/2: {\\"n\\":\\"g3\\",\\"s\\":\\"sawtooth\\"}",
-  "1/2 -> 3/5: {\\"n\\":\\"f3\\",\\"s\\":\\"sawtooth\\"}",
-  "3/5 -> 7/10: {\\"n\\":\\"ab3\\",\\"s\\":\\"sawtooth\\"}",
-  "7/10 -> 4/5: {\\"n\\":\\"b2\\",\\"s\\":\\"sawtooth\\"}",
-  "4/5 -> 9/10: {\\"n\\":\\"ab3\\",\\"s\\":\\"sawtooth\\"}",
-  "9/10 -> 1/1: {\\"n\\":\\"f3\\",\\"s\\":\\"sawtooth\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 210 https://strudel.cc/?xHaKTd1kTpCn 1`] = `
-[
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":0,\\"cut\\":1,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":0,\\"cut\\":1,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":1,\\"value\\":4}",
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":0,\\"cut\\":0,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":1,\\"value\\":4}",
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":0,\\"cut\\":0,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":0,\\"cut\\":1,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":0,\\"cut\\":1,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":0,\\"cut\\":1,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0,\\"value\\":4}",
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":0,\\"cut\\":0,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0,\\"value\\":4}",
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":0,\\"cut\\":0,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0,\\"value\\":4}",
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":1,\\"cut\\":0,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0,\\"value\\":4}",
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":1,\\"cut\\":0,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":4}",
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":4}",
-  "3/4 -> 1/1: {\\"s\\":\\"hh\\",\\"note\\":44,\\"n\\":0,\\"cut\\":1,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "3/4 -> 1/1: {\\"s\\":\\"hh\\",\\"note\\":44,\\"n\\":0,\\"cut\\":1,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":1,\\"value\\":4}",
-  "3/4 -> 1/1: {\\"s\\":\\"hh\\",\\"note\\":44,\\"n\\":0,\\"cut\\":0,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":1,\\"value\\":4}",
-  "1/2 -> 3/4: {\\"s\\":\\"lt\\",\\"note\\":44,\\"n\\":0,\\"cut\\":0,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":1,\\"value\\":4}",
-  "1/2 -> 3/4: {\\"s\\":\\"lt\\",\\"note\\":44,\\"n\\":0,\\"cut\\":0,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "1/2 -> 3/4: {\\"s\\":\\"lt\\",\\"note\\":44,\\"n\\":0,\\"cut\\":1,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "1/4 -> 1/2: {\\"s\\":\\"hh\\",\\"note\\":44,\\"n\\":0,\\"cut\\":1,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "1/4 -> 1/2: {\\"s\\":\\"hh\\",\\"note\\":44,\\"n\\":0,\\"cut\\":1,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0,\\"value\\":4}",
-  "1/4 -> 1/2: {\\"s\\":\\"hh\\",\\"note\\":44,\\"n\\":0,\\"cut\\":0,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0,\\"value\\":4}",
-  "1/4 -> 1/2: {\\"s\\":\\"hh\\",\\"note\\":44,\\"n\\":0,\\"cut\\":0,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0,\\"value\\":4}",
-  "1/4 -> 1/2: {\\"s\\":\\"hh\\",\\"note\\":44,\\"n\\":1,\\"cut\\":0,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0,\\"value\\":4}",
-  "0/1 -> 1/4: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":1,\\"cut\\":0,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "0/1 -> 1/4: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "0/1 -> 1/4: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "0/1 -> 1/4: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "0/1 -> 1/4: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":4}",
-  "0/1 -> 1/4: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":4}",
-  "9/16 -> 9/8: {\\"s\\":\\"misc\\",\\"note\\":44,\\"n\\":0,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "9/16 -> 9/8: {\\"s\\":\\"misc\\",\\"note\\":44,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":5}",
-  "0/1 -> 9/8: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":0,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "0/1 -> 9/8: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":5}",
-  "7/8 -> 9/8: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":0,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "7/8 -> 9/8: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":5}",
-  "9/16 -> 9/8: {\\"s\\":\\"misc\\",\\"note\\":44,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":1,\\"value\\":5}",
-  "9/16 -> 9/8: {\\"s\\":\\"misc\\",\\"note\\":44,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":1,\\"value\\":5}",
-  "9/16 -> 9/8: {\\"s\\":\\"misc\\",\\"note\\":44,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "9/16 -> 9/8: {\\"s\\":\\"misc\\",\\"note\\":44,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "9/16 -> 9/8: {\\"s\\":\\"misc\\",\\"note\\":44,\\"n\\":1,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "9/16 -> 9/8: {\\"s\\":\\"misc\\",\\"note\\":44,\\"n\\":1,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "0/1 -> 9/16: {\\"s\\":\\"misc\\",\\"note\\":44,\\"n\\":1,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0,\\"value\\":5}",
-  "0/1 -> 9/16: {\\"s\\":\\"misc\\",\\"note\\":30,\\"n\\":1,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0,\\"value\\":5}",
-  "0/1 -> 9/16: {\\"s\\":\\"misc\\",\\"note\\":30,\\"n\\":1,\\"cut\\":0,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0,\\"value\\":5}",
-  "0/1 -> 9/16: {\\"s\\":\\"misc\\",\\"note\\":30,\\"n\\":1,\\"cut\\":0,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "0/1 -> 9/16: {\\"s\\":\\"misc\\",\\"note\\":30,\\"n\\":2,\\"cut\\":0,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "0/1 -> 9/16: {\\"s\\":\\"misc\\",\\"note\\":30,\\"n\\":2,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "0/1 -> 9/16: {\\"s\\":\\"misc\\",\\"note\\":30,\\"n\\":2,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":5}",
-  "0/1 -> 9/16: {\\"s\\":\\"misc\\",\\"note\\":30,\\"n\\":2,\\"cut\\":1,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":5}",
-  "0/1 -> 9/16: {\\"s\\":\\"misc\\",\\"note\\":30,\\"n\\":2,\\"cut\\":0,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":5}",
-  "0/1 -> 9/8: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":1,\\"value\\":5}",
-  "0/1 -> 9/8: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":1,\\"value\\":5}",
-  "0/1 -> 9/8: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "0/1 -> 9/8: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "0/1 -> 9/8: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":1,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "0/1 -> 9/8: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":1,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "0/1 -> 9/8: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":1,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0,\\"value\\":5}",
-  "0/1 -> 9/8: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":1,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0,\\"value\\":5}",
-  "0/1 -> 9/8: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":1,\\"cut\\":0,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0,\\"value\\":5}",
-  "0/1 -> 9/8: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":1,\\"cut\\":0,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "0/1 -> 9/8: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":2,\\"cut\\":0,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "0/1 -> 9/8: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":2,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "0/1 -> 9/8: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":2,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":5}",
-  "0/1 -> 9/8: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":2,\\"cut\\":1,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":5}",
-  "0/1 -> 9/8: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":2,\\"cut\\":0,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":5}",
-  "5/8 -> 7/8: {\\"s\\":\\"hh\\",\\"note\\":44,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":1,\\"value\\":5}",
-  "5/8 -> 7/8: {\\"s\\":\\"hh\\",\\"note\\":44,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":1,\\"value\\":5}",
-  "5/8 -> 7/8: {\\"s\\":\\"hh\\",\\"note\\":44,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "5/8 -> 7/8: {\\"s\\":\\"hh\\",\\"note\\":44,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "3/8 -> 5/8: {\\"s\\":\\"lt\\",\\"note\\":44,\\"n\\":1,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "3/8 -> 5/8: {\\"s\\":\\"lt\\",\\"note\\":44,\\"n\\":1,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "3/8 -> 5/8: {\\"s\\":\\"lt\\",\\"note\\":44,\\"n\\":1,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0,\\"value\\":5}",
-  "3/8 -> 5/8: {\\"s\\":\\"lt\\",\\"note\\":30,\\"n\\":1,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0,\\"value\\":5}",
-  "3/8 -> 5/8: {\\"s\\":\\"lt\\",\\"note\\":30,\\"n\\":1,\\"cut\\":0,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0,\\"value\\":5}",
-  "1/8 -> 3/8: {\\"s\\":\\"hh\\",\\"note\\":30,\\"n\\":1,\\"cut\\":0,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "1/8 -> 3/8: {\\"s\\":\\"hh\\",\\"note\\":30,\\"n\\":2,\\"cut\\":0,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "1/8 -> 3/8: {\\"s\\":\\"hh\\",\\"note\\":30,\\"n\\":2,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "1/8 -> 3/8: {\\"s\\":\\"hh\\",\\"note\\":30,\\"n\\":2,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":5}",
-  "-1/8 -> 1/8: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":2,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":5}",
-  "-1/8 -> 1/8: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":2,\\"cut\\":1,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":5}",
-  "-1/8 -> 1/8: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":2,\\"cut\\":0,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":5}",
-  "1/8 -> 5/4: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":6}",
-  "1/8 -> 5/4: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":6}",
-  "1/8 -> 5/4: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "1/8 -> 5/4: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":2,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "3/4 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":6}",
-  "3/4 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":6}",
-  "3/4 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "3/4 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":2,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "1/8 -> 5/4: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":2,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "1/8 -> 5/4: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":2,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0,\\"value\\":6}",
-  "1/8 -> 5/4: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0,\\"value\\":6}",
-  "1/8 -> 5/4: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "1/8 -> 5/4: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "1/8 -> 5/4: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "1/8 -> 5/4: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":1,\\"value\\":6}",
-  "1/8 -> 5/4: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":2,\\"cut\\":1,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":6}",
-  "1/8 -> 5/4: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":2,\\"cut\\":1,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":6}",
-  "1/8 -> 5/4: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":3,\\"cut\\":1,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":6}",
-  "-1/1 -> 1/8: {\\"s\\":\\"birds\\",\\"note\\":30,\\"n\\":3,\\"cut\\":1,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "-1/1 -> 1/8: {\\"s\\":\\"birds\\",\\"note\\":30,\\"n\\":3,\\"cut\\":0,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "1/2 -> 3/4: {\\"s\\":\\"hh\\",\\"note\\":30,\\"n\\":2,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "1/2 -> 3/4: {\\"s\\":\\"hh\\",\\"note\\":30,\\"n\\":2,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0,\\"value\\":6}",
-  "1/2 -> 3/4: {\\"s\\":\\"hh\\",\\"note\\":30,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0,\\"value\\":6}",
-  "1/4 -> 1/2: {\\"s\\":\\"lt\\",\\"note\\":30,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "1/4 -> 1/2: {\\"s\\":\\"lt\\",\\"note\\":30,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "1/4 -> 1/2: {\\"s\\":\\"lt\\",\\"note\\":30,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "1/4 -> 1/2: {\\"s\\":\\"lt\\",\\"note\\":30,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":1,\\"value\\":6}",
-  "0/1 -> 1/4: {\\"s\\":\\"hh\\",\\"note\\":30,\\"n\\":2,\\"cut\\":1,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":6}",
-  "0/1 -> 1/4: {\\"s\\":\\"hh\\",\\"note\\":30,\\"n\\":2,\\"cut\\":1,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":6}",
-  "0/1 -> 1/4: {\\"s\\":\\"hh\\",\\"note\\":30,\\"n\\":3,\\"cut\\":1,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":6}",
-  "0/1 -> 1/4: {\\"s\\":\\"hh\\",\\"note\\":30,\\"n\\":3,\\"cut\\":1,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "0/1 -> 1/4: {\\"s\\":\\"hh\\",\\"note\\":30,\\"n\\":3,\\"cut\\":0,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 211 https://strudel.cc/?o5LLePbx8kiQ 1`] = `
-[
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":0,\\"cut\\":1,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":0,\\"cut\\":1,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":1,\\"value\\":4}",
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":0,\\"cut\\":0,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":1,\\"value\\":4}",
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":0,\\"cut\\":0,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":1,\\"value\\":4}",
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":0,\\"cut\\":0,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":0,\\"cut\\":1,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":0,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":0,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":0,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0,\\"value\\":4}",
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":0,\\"cut\\":0,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0,\\"value\\":4}",
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":0,\\"cut\\":0,\\"attack\\":0.05,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0,\\"value\\":4}",
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":1,\\"cut\\":0,\\"attack\\":0.05,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0,\\"value\\":4}",
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":1,\\"cut\\":0,\\"attack\\":0.05,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":1,\\"cut\\":2,\\"attack\\":0,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":1,\\"cut\\":2,\\"attack\\":0,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":1,\\"cut\\":2,\\"attack\\":0,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":4}",
-  "-1/8 -> 1/1: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":1,\\"cut\\":2,\\"attack\\":0,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":4}",
-  "3/4 -> 1/1: {\\"s\\":\\"hh\\",\\"note\\":44,\\"n\\":0,\\"cut\\":1,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "3/4 -> 1/1: {\\"s\\":\\"hh\\",\\"note\\":44,\\"n\\":0,\\"cut\\":1,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":1,\\"value\\":4}",
-  "3/4 -> 1/1: {\\"s\\":\\"hh\\",\\"note\\":44,\\"n\\":0,\\"cut\\":0,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":1,\\"value\\":4}",
-  "1/2 -> 3/4: {\\"s\\":\\"lt\\",\\"note\\":44,\\"n\\":0,\\"cut\\":0,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":1,\\"value\\":4}",
-  "1/2 -> 3/4: {\\"s\\":\\"lt\\",\\"note\\":44,\\"n\\":0,\\"cut\\":0,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":1,\\"value\\":4}",
-  "1/2 -> 3/4: {\\"s\\":\\"lt\\",\\"note\\":44,\\"n\\":0,\\"cut\\":0,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "1/2 -> 3/4: {\\"s\\":\\"lt\\",\\"note\\":44,\\"n\\":0,\\"cut\\":1,\\"attack\\":0.01,\\"decay\\":0.01,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "1/2 -> 3/4: {\\"s\\":\\"lt\\",\\"note\\":44,\\"n\\":0,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "1/4 -> 1/2: {\\"s\\":\\"hh\\",\\"note\\":44,\\"n\\":0,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "1/4 -> 1/2: {\\"s\\":\\"hh\\",\\"note\\":44,\\"n\\":0,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0,\\"value\\":4}",
-  "1/4 -> 1/2: {\\"s\\":\\"hh\\",\\"note\\":44,\\"n\\":0,\\"cut\\":0,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0,\\"value\\":4}",
-  "1/4 -> 1/2: {\\"s\\":\\"hh\\",\\"note\\":44,\\"n\\":0,\\"cut\\":0,\\"attack\\":0.05,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0,\\"value\\":4}",
-  "1/4 -> 1/2: {\\"s\\":\\"hh\\",\\"note\\":44,\\"n\\":1,\\"cut\\":0,\\"attack\\":0.05,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0,\\"value\\":4}",
-  "0/1 -> 1/4: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":1,\\"cut\\":0,\\"attack\\":0.05,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "0/1 -> 1/4: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "0/1 -> 1/4: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":1,\\"cut\\":2,\\"attack\\":0,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "0/1 -> 1/4: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":1,\\"cut\\":2,\\"attack\\":0,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":4}",
-  "0/1 -> 1/4: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":1,\\"cut\\":2,\\"attack\\":0,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":4}",
-  "0/1 -> 1/4: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":1,\\"cut\\":2,\\"attack\\":0,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":4}",
-  "5/8 -> 7/4: {\\"s\\":\\"breaks125\\",\\"note\\":51,\\"n\\":3,\\"cut\\":2,\\"attack\\":0,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "5/8 -> 7/4: {\\"s\\":\\"breaks125\\",\\"note\\":51,\\"n\\":3,\\"cut\\":2,\\"attack\\":0,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "7/8 -> 9/8: {\\"s\\":\\"hh\\",\\"note\\":51,\\"n\\":3,\\"cut\\":2,\\"attack\\":0,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "7/8 -> 9/8: {\\"s\\":\\"hh\\",\\"note\\":51,\\"n\\":3,\\"cut\\":2,\\"attack\\":0,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "1/2 -> 17/16: {\\"s\\":\\"ht\\",\\"note\\":30,\\"n\\":1,\\"cut\\":0,\\"attack\\":0,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "1/2 -> 17/16: {\\"s\\":\\"ht\\",\\"note\\":30,\\"n\\":2,\\"cut\\":0,\\"attack\\":0,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "1/2 -> 17/16: {\\"s\\":\\"ht\\",\\"note\\":30,\\"n\\":2,\\"cut\\":1,\\"attack\\":0,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "1/2 -> 17/16: {\\"s\\":\\"ht\\",\\"note\\":30,\\"n\\":2,\\"cut\\":1,\\"attack\\":0,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "1/2 -> 17/16: {\\"s\\":\\"ht\\",\\"note\\":30,\\"n\\":2,\\"cut\\":1,\\"attack\\":0,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":5}",
-  "1/2 -> 17/16: {\\"s\\":\\"ht\\",\\"note\\":30,\\"n\\":2,\\"cut\\":1,\\"attack\\":0.01,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":5}",
-  "1/2 -> 17/16: {\\"s\\":\\"ht\\",\\"note\\":30,\\"n\\":2,\\"cut\\":0,\\"attack\\":0.01,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":5}",
-  "1/2 -> 13/8: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":1,\\"cut\\":0,\\"attack\\":0,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "1/2 -> 13/8: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":2,\\"cut\\":0,\\"attack\\":0,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "1/2 -> 13/8: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":2,\\"cut\\":1,\\"attack\\":0,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "1/2 -> 13/8: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":2,\\"cut\\":1,\\"attack\\":0,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "1/2 -> 13/8: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":2,\\"cut\\":1,\\"attack\\":0,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":5}",
-  "1/2 -> 13/8: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":2,\\"cut\\":1,\\"attack\\":0.01,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":5}",
-  "1/2 -> 13/8: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":2,\\"cut\\":0,\\"attack\\":0.01,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":5}",
-  "-5/8 -> 1/2: {\\"s\\":\\"breaks125\\",\\"note\\":30,\\"n\\":2,\\"cut\\":0,\\"attack\\":0.01,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "5/8 -> 7/8: {\\"s\\":\\"hh\\",\\"note\\":30,\\"n\\":1,\\"cut\\":0,\\"attack\\":0,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "5/8 -> 7/8: {\\"s\\":\\"hh\\",\\"note\\":30,\\"n\\":2,\\"cut\\":0,\\"attack\\":0,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "5/8 -> 7/8: {\\"s\\":\\"hh\\",\\"note\\":30,\\"n\\":2,\\"cut\\":1,\\"attack\\":0,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "5/8 -> 7/8: {\\"s\\":\\"hh\\",\\"note\\":30,\\"n\\":2,\\"cut\\":1,\\"attack\\":0,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "5/8 -> 7/8: {\\"s\\":\\"hh\\",\\"note\\":30,\\"n\\":2,\\"cut\\":1,\\"attack\\":0,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":5}",
-  "3/8 -> 5/8: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":2,\\"cut\\":1,\\"attack\\":0,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":5}",
-  "3/8 -> 5/8: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":2,\\"cut\\":1,\\"attack\\":0.01,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":5}",
-  "3/8 -> 5/8: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":2,\\"cut\\":0,\\"attack\\":0.01,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":5}",
-  "3/8 -> 5/8: {\\"s\\":\\"bd\\",\\"note\\":30,\\"n\\":2,\\"cut\\":0,\\"attack\\":0.01,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "-5/8 -> 1/2: {\\"s\\":\\"breaks125\\",\\"note\\":30,\\"n\\":2,\\"cut\\":0,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "-5/8 -> 1/2: {\\"s\\":\\"breaks125\\",\\"note\\":30,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "-5/8 -> 1/2: {\\"s\\":\\"breaks125\\",\\"note\\":30,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0,\\"value\\":5}",
-  "-5/8 -> 1/2: {\\"s\\":\\"breaks125\\",\\"note\\":30,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0,\\"value\\":5}",
-  "-5/8 -> 1/2: {\\"s\\":\\"breaks125\\",\\"note\\":51,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0,\\"value\\":5}",
-  "-5/8 -> 1/2: {\\"s\\":\\"breaks125\\",\\"note\\":51,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0,\\"value\\":5}",
-  "-5/8 -> 1/2: {\\"s\\":\\"breaks125\\",\\"note\\":51,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "-5/8 -> 1/2: {\\"s\\":\\"breaks125\\",\\"note\\":51,\\"n\\":3,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "-5/8 -> 1/2: {\\"s\\":\\"breaks125\\",\\"note\\":51,\\"n\\":3,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "1/8 -> 3/8: {\\"s\\":\\"hh\\",\\"note\\":30,\\"n\\":2,\\"cut\\":0,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "1/8 -> 3/8: {\\"s\\":\\"hh\\",\\"note\\":30,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "1/8 -> 3/8: {\\"s\\":\\"hh\\",\\"note\\":30,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0,\\"value\\":5}",
-  "1/8 -> 3/8: {\\"s\\":\\"hh\\",\\"note\\":30,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0,\\"value\\":5}",
-  "1/8 -> 3/8: {\\"s\\":\\"hh\\",\\"note\\":51,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0,\\"value\\":5}",
-  "1/8 -> 3/8: {\\"s\\":\\"hh\\",\\"note\\":51,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0,\\"value\\":5}",
-  "-1/8 -> 1/8: {\\"s\\":\\"lt\\",\\"note\\":51,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "-1/8 -> 1/8: {\\"s\\":\\"lt\\",\\"note\\":51,\\"n\\":3,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "-1/8 -> 1/8: {\\"s\\":\\"lt\\",\\"note\\":51,\\"n\\":3,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":5}",
-  "11/16 -> 5/4: {\\"s\\":\\"misc\\",\\"note\\":44,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":1,\\"value\\":6}",
-  "11/16 -> 5/4: {\\"s\\":\\"misc\\",\\"note\\":44,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":1,\\"value\\":6}",
-  "11/16 -> 5/4: {\\"s\\":\\"misc\\",\\"note\\":44,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "1/8 -> 5/4: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":1,\\"value\\":6}",
-  "1/8 -> 5/4: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":1,\\"value\\":6}",
-  "1/8 -> 5/4: {\\"s\\":\\"bd\\",\\"note\\":44,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "3/4 -> 1/1: {\\"s\\":\\"hh\\",\\"note\\":44,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":1,\\"value\\":6}",
-  "3/4 -> 1/1: {\\"s\\":\\"hh\\",\\"note\\":44,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":1,\\"value\\":6}",
-  "3/4 -> 1/1: {\\"s\\":\\"hh\\",\\"note\\":44,\\"n\\":1,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "-1/4 -> 7/8: {\\"s\\":\\"breaks125\\",\\"note\\":30,\\"n\\":2,\\"cut\\":0,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "-1/4 -> 7/8: {\\"s\\":\\"breaks125\\",\\"note\\":30,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "-1/4 -> 7/8: {\\"s\\":\\"breaks125\\",\\"note\\":30,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0,\\"value\\":6}",
-  "-1/4 -> 7/8: {\\"s\\":\\"breaks125\\",\\"note\\":30,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0,\\"value\\":6}",
-  "-1/4 -> 7/8: {\\"s\\":\\"breaks125\\",\\"note\\":51,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0,\\"value\\":6}",
-  "-1/4 -> 7/8: {\\"s\\":\\"breaks125\\",\\"note\\":51,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0,\\"value\\":6}",
-  "-1/4 -> 7/8: {\\"s\\":\\"breaks125\\",\\"note\\":51,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "-1/4 -> 7/8: {\\"s\\":\\"breaks125\\",\\"note\\":51,\\"n\\":3,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "-1/4 -> 7/8: {\\"s\\":\\"breaks125\\",\\"note\\":51,\\"n\\":3,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "-1/4 -> 7/8: {\\"s\\":\\"breaks125\\",\\"note\\":51,\\"n\\":3,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "-1/4 -> 7/8: {\\"s\\":\\"breaks125\\",\\"note\\":51,\\"n\\":3,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":1,\\"value\\":6}",
-  "-1/4 -> 7/8: {\\"s\\":\\"breaks125\\",\\"note\\":51,\\"n\\":3,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":6}",
-  "-1/4 -> 7/8: {\\"s\\":\\"breaks125\\",\\"note\\":51,\\"n\\":3,\\"cut\\":1,\\"attack\\":0,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":6}",
-  "-1/4 -> 7/8: {\\"s\\":\\"breaks125\\",\\"note\\":51,\\"n\\":3,\\"cut\\":2,\\"attack\\":0,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":6}",
-  "-1/4 -> 7/8: {\\"s\\":\\"breaks125\\",\\"note\\":51,\\"n\\":3,\\"cut\\":2,\\"attack\\":0,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "-1/4 -> 7/8: {\\"s\\":\\"breaks125\\",\\"note\\":51,\\"n\\":3,\\"cut\\":2,\\"attack\\":0,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "1/2 -> 3/4: {\\"s\\":\\"hh\\",\\"note\\":30,\\"n\\":2,\\"cut\\":0,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "1/2 -> 3/4: {\\"s\\":\\"hh\\",\\"note\\":30,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "1/2 -> 3/4: {\\"s\\":\\"hh\\",\\"note\\":30,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0,\\"value\\":6}",
-  "1/2 -> 3/4: {\\"s\\":\\"hh\\",\\"note\\":30,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.01,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0,\\"value\\":6}",
-  "1/2 -> 3/4: {\\"s\\":\\"hh\\",\\"note\\":51,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0,\\"value\\":6}",
-  "1/2 -> 3/4: {\\"s\\":\\"hh\\",\\"note\\":51,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0,\\"value\\":6}",
-  "1/4 -> 1/2: {\\"s\\":\\"lt\\",\\"note\\":51,\\"n\\":2,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "1/4 -> 1/2: {\\"s\\":\\"lt\\",\\"note\\":51,\\"n\\":3,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "1/4 -> 1/2: {\\"s\\":\\"lt\\",\\"note\\":51,\\"n\\":3,\\"cut\\":2,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "1/4 -> 1/2: {\\"s\\":\\"lt\\",\\"note\\":51,\\"n\\":3,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "1/4 -> 1/2: {\\"s\\":\\"lt\\",\\"note\\":51,\\"n\\":3,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.2,\\"release\\":2,\\"pan\\":1,\\"value\\":6}",
-  "0/1 -> 1/4: {\\"s\\":\\"hh\\",\\"note\\":51,\\"n\\":3,\\"cut\\":1,\\"attack\\":0.05,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":6}",
-  "0/1 -> 1/4: {\\"s\\":\\"hh\\",\\"note\\":51,\\"n\\":3,\\"cut\\":1,\\"attack\\":0,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":6}",
-  "0/1 -> 1/4: {\\"s\\":\\"hh\\",\\"note\\":51,\\"n\\":3,\\"cut\\":2,\\"attack\\":0,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":1,\\"value\\":6}",
-  "0/1 -> 1/4: {\\"s\\":\\"hh\\",\\"note\\":51,\\"n\\":3,\\"cut\\":2,\\"attack\\":0,\\"decay\\":0.01,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-  "0/1 -> 1/4: {\\"s\\":\\"hh\\",\\"note\\":51,\\"n\\":3,\\"cut\\":2,\\"attack\\":0,\\"decay\\":0.9,\\"sustain\\":0.6,\\"release\\":2,\\"pan\\":0.5,\\"value\\":6}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 212 https://strudel.cc/?QJdSFHrNzFlO 1`] = `
-[
-  "0/1 -> 1/2: {\\"s\\":\\"bd\\",\\"delay\\":0.5,\\"delaytime\\":0.33,\\"delayfeedback\\":0.6}",
-  "1/2 -> 1/1: {\\"s\\":\\"sd\\",\\"delay\\":0.5,\\"delaytime\\":0.33,\\"delayfeedback\\":0.6}",
-  "0/1 -> 1/2: {\\"s\\":\\"hh\\",\\"delay\\":0.8,\\"delaytime\\":0.08,\\"delayfeedback\\":0.7,\\"orbit\\":2}",
-  "1/2 -> 1/1: {\\"s\\":\\"hh\\",\\"delay\\":0.8,\\"delaytime\\":0.08,\\"delayfeedback\\":0.7,\\"orbit\\":2}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 213 https://strudel.cc/?Nkv2L01eF62W 1`] = `
-[
-  "0/1 -> 1/2: {\\"s\\":\\"bd\\",\\"delay\\":0.5,\\"delaytime\\":0.33,\\"delayfeedback\\":0.6,\\"speed\\":-1}",
-  "1/2 -> 1/1: {\\"s\\":\\"sd\\",\\"delay\\":0.5,\\"delaytime\\":0.33,\\"delayfeedback\\":0.6,\\"speed\\":-1}",
-  "0/1 -> 1/2: {\\"s\\":\\"hh\\",\\"delay\\":0.8,\\"delaytime\\":0.08,\\"delayfeedback\\":0.7,\\"orbit\\":2,\\"speed\\":-1}",
-  "1/2 -> 1/1: {\\"s\\":\\"hh\\",\\"delay\\":0.8,\\"delaytime\\":0.08,\\"delayfeedback\\":0.7,\\"orbit\\":2,\\"speed\\":-1}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 214 https://strudel.cc/?fWCYi76JTGuA 1`] = `
-[
-  "0/1 -> 1/2: {\\"s\\":\\"bd\\",\\"delay\\":0,\\"delaytime\\":0.16,\\"delayfeedback\\":0.6,\\"speed\\":-1}",
-  "1/2 -> 1/1: {\\"s\\":\\"sd\\",\\"delay\\":0,\\"delaytime\\":0.16,\\"delayfeedback\\":0.6,\\"speed\\":-1}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 215 https://strudel.cc/?yJ-qOjgrjkMk 1`] = `
-[
-  "0/1 -> 1/2: c1",
-  "1/2 -> 1/1: c1",
-  "1/2 -> 1/1: c3",
-  "0/1 -> 1/4: C1",
-  "1/4 -> 1/2: C3",
-  "1/2 -> 3/4: C1",
-  "3/4 -> 1/1: C3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 216 https://strudel.cc/?UPVdAQhVNgbc 1`] = `
-[
-  "0/1 -> 1/6: {\\"note\\":\\"g3\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":4000,\\"crush\\":16}",
-  "1/6 -> 1/3: {\\"note\\":\\"g3\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":4000,\\"crush\\":16}",
-  "1/3 -> 1/2: {\\"note\\":\\"g3\\",\\"s\\":\\"triangle\\",\\"cutoff\\":4000,\\"crush\\":16}",
-  "1/2 -> 2/3: {\\"note\\":\\"g3\\",\\"s\\":\\"triangle\\",\\"cutoff\\":4000,\\"crush\\":16}",
-  "2/3 -> 5/6: {\\"note\\":\\"g3\\",\\"s\\":\\"triangle\\",\\"cutoff\\":4000,\\"crush\\":16}",
-  "5/6 -> 1/1: {\\"note\\":\\"g3\\",\\"s\\":\\"triangle\\",\\"cutoff\\":4000,\\"crush\\":16}",
-  "0/1 -> 1/6: {\\"note\\":\\"b3\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":4000,\\"crush\\":16}",
-  "1/6 -> 1/3: {\\"note\\":\\"b3\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":4000,\\"crush\\":16}",
-  "1/3 -> 1/2: {\\"note\\":\\"b3\\",\\"s\\":\\"triangle\\",\\"cutoff\\":4000,\\"crush\\":16}",
-  "1/2 -> 2/3: {\\"note\\":\\"b3\\",\\"s\\":\\"triangle\\",\\"cutoff\\":4000,\\"crush\\":16}",
-  "2/3 -> 5/6: {\\"note\\":\\"b3\\",\\"s\\":\\"triangle\\",\\"cutoff\\":4000,\\"crush\\":16}",
-  "5/6 -> 1/1: {\\"note\\":\\"b3\\",\\"s\\":\\"triangle\\",\\"cutoff\\":4000,\\"crush\\":16}",
-  "0/1 -> 1/6: {\\"note\\":\\"e4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":4000,\\"crush\\":16}",
-  "1/6 -> 1/3: {\\"note\\":\\"e4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":4000,\\"crush\\":16}",
-  "1/3 -> 1/2: {\\"note\\":\\"e4\\",\\"s\\":\\"triangle\\",\\"cutoff\\":4000,\\"crush\\":16}",
-  "1/2 -> 2/3: {\\"note\\":\\"e4\\",\\"s\\":\\"triangle\\",\\"cutoff\\":4000,\\"crush\\":16}",
-  "2/3 -> 5/6: {\\"note\\":\\"e4\\",\\"s\\":\\"triangle\\",\\"cutoff\\":4000,\\"crush\\":16}",
-  "5/6 -> 1/1: {\\"note\\":\\"e4\\",\\"s\\":\\"triangle\\",\\"cutoff\\":4000,\\"crush\\":16}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 217 https://strudel.cc/?WDuiXaMhRRx5 1`] = `
-[
-  "0/1 -> 8/5: {\\"note\\":85,\\"s\\":\\"piano\\",\\"cutoff\\":\\"500\\"}",
-  "0/1 -> 8/5: {\\"note\\":81,\\"s\\":\\"piano\\",\\"cutoff\\":\\"500\\"}",
-  "0/1 -> 8/5: {\\"note\\":77,\\"s\\":\\"piano\\",\\"cutoff\\":\\"500\\"}",
-  "4/5 -> 16/15: {\\"note\\":98,\\"s\\":\\"piano\\",\\"cutoff\\":\\"500\\"}",
-  "0/1 -> 4/5: {\\"note\\":85,\\"s\\":\\"piano\\",\\"cutoff\\":\\"500\\"}",
-  "0/1 -> 4/5: {\\"note\\":81,\\"s\\":\\"piano\\",\\"cutoff\\":\\"500\\"}",
-  "0/1 -> 4/5: {\\"note\\":77,\\"s\\":\\"piano\\",\\"cutoff\\":\\"500\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 218 https://strudel.cc/?sOP6EO9TO4HO 1`] = `
-[
-  "0/1 -> 1/1: B3",
-  "0/1 -> 1/1: D4",
-  "0/1 -> 1/1: E4",
-  "0/1 -> 1/1: G4",
-  "0/1 -> 1/1: C3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 219 https://strudel.cc/?ddiSv-lz2_cp 1`] = `
-[
-  "0/1 -> 1/6: {\\"note\\":53,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":507.8125,\\"gain\\":0.9166666666666666}",
-  "0/1 -> 1/6: {\\"note\\":57,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":507.8125,\\"gain\\":0.9166666666666666}",
-  "0/1 -> 1/6: {\\"note\\":60,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":507.8125,\\"gain\\":0.9166666666666666}",
-  "0/1 -> 1/6: {\\"note\\":64,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":507.8125,\\"gain\\":0.9166666666666666}",
-  "0/1 -> 1/6: {\\"note\\":53.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":507.8125,\\"gain\\":0.9166666666666666}",
-  "0/1 -> 1/6: {\\"note\\":57.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":507.8125,\\"gain\\":0.9166666666666666}",
-  "0/1 -> 1/6: {\\"note\\":60.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":507.8125,\\"gain\\":0.9166666666666666}",
-  "0/1 -> 1/6: {\\"note\\":64.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":507.8125,\\"gain\\":0.9166666666666666}",
-  "1/6 -> 1/3: {\\"note\\":53,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":523.4375,\\"gain\\":0.75}",
-  "1/6 -> 1/3: {\\"note\\":57,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":523.4375,\\"gain\\":0.75}",
-  "1/6 -> 1/3: {\\"note\\":60,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":523.4375,\\"gain\\":0.75}",
-  "1/6 -> 1/3: {\\"note\\":64,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":523.4375,\\"gain\\":0.75}",
-  "1/6 -> 1/3: {\\"note\\":53.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":523.4375,\\"gain\\":0.75}",
-  "1/6 -> 1/3: {\\"note\\":57.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":523.4375,\\"gain\\":0.75}",
-  "1/6 -> 1/3: {\\"note\\":60.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":523.4375,\\"gain\\":0.75}",
-  "1/6 -> 1/3: {\\"note\\":64.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":523.4375,\\"gain\\":0.75}",
-  "1/3 -> 1/2: {\\"note\\":53,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":539.0625,\\"gain\\":0.5833333333333333}",
-  "1/3 -> 1/2: {\\"note\\":57,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":539.0625,\\"gain\\":0.5833333333333333}",
-  "1/3 -> 1/2: {\\"note\\":60,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":539.0625,\\"gain\\":0.5833333333333333}",
-  "1/3 -> 1/2: {\\"note\\":64,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":539.0625,\\"gain\\":0.5833333333333333}",
-  "1/3 -> 1/2: {\\"note\\":53.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":539.0625,\\"gain\\":0.5833333333333333}",
-  "1/3 -> 1/2: {\\"note\\":57.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":539.0625,\\"gain\\":0.5833333333333333}",
-  "1/3 -> 1/2: {\\"note\\":60.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":539.0625,\\"gain\\":0.5833333333333333}",
-  "1/3 -> 1/2: {\\"note\\":64.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":539.0625,\\"gain\\":0.5833333333333333}",
-  "1/2 -> 2/3: {\\"note\\":53,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":554.6875,\\"gain\\":0.41666666666666663}",
-  "1/2 -> 2/3: {\\"note\\":57,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":554.6875,\\"gain\\":0.41666666666666663}",
-  "1/2 -> 2/3: {\\"note\\":60,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":554.6875,\\"gain\\":0.41666666666666663}",
-  "1/2 -> 2/3: {\\"note\\":64,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":554.6875,\\"gain\\":0.41666666666666663}",
-  "1/2 -> 2/3: {\\"note\\":53.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":554.6875,\\"gain\\":0.41666666666666663}",
-  "1/2 -> 2/3: {\\"note\\":57.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":554.6875,\\"gain\\":0.41666666666666663}",
-  "1/2 -> 2/3: {\\"note\\":60.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":554.6875,\\"gain\\":0.41666666666666663}",
-  "1/2 -> 2/3: {\\"note\\":64.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":554.6875,\\"gain\\":0.41666666666666663}",
-  "2/3 -> 5/6: {\\"note\\":53,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":570.3125,\\"gain\\":0.25}",
-  "2/3 -> 5/6: {\\"note\\":57,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":570.3125,\\"gain\\":0.25}",
-  "2/3 -> 5/6: {\\"note\\":60,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":570.3125,\\"gain\\":0.25}",
-  "2/3 -> 5/6: {\\"note\\":64,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":570.3125,\\"gain\\":0.25}",
-  "2/3 -> 5/6: {\\"note\\":53.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":570.3125,\\"gain\\":0.25}",
-  "2/3 -> 5/6: {\\"note\\":57.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":570.3125,\\"gain\\":0.25}",
-  "2/3 -> 5/6: {\\"note\\":60.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":570.3125,\\"gain\\":0.25}",
-  "2/3 -> 5/6: {\\"note\\":64.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":570.3125,\\"gain\\":0.25}",
-  "5/6 -> 1/1: {\\"note\\":53,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":585.9375,\\"gain\\":0.08333333333333337}",
-  "5/6 -> 1/1: {\\"note\\":57,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":585.9375,\\"gain\\":0.08333333333333337}",
-  "5/6 -> 1/1: {\\"note\\":60,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":585.9375,\\"gain\\":0.08333333333333337}",
-  "5/6 -> 1/1: {\\"note\\":64,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":585.9375,\\"gain\\":0.08333333333333337}",
-  "5/6 -> 1/1: {\\"note\\":53.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":585.9375,\\"gain\\":0.08333333333333337}",
-  "5/6 -> 1/1: {\\"note\\":57.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":585.9375,\\"gain\\":0.08333333333333337}",
-  "5/6 -> 1/1: {\\"note\\":60.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":585.9375,\\"gain\\":0.08333333333333337}",
-  "5/6 -> 1/1: {\\"note\\":64.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":585.9375,\\"gain\\":0.08333333333333337}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 220 https://strudel.cc/?cpVS2-bO1LzP 1`] = `
-[
-  "0/1 -> 1/6: {\\"note\\":53,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":507.8125,\\"gain\\":0.9166666666666666}",
-  "0/1 -> 1/6: {\\"note\\":57,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":507.8125,\\"gain\\":0.9166666666666666}",
-  "0/1 -> 1/6: {\\"note\\":60,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":507.8125,\\"gain\\":0.9166666666666666}",
-  "0/1 -> 1/6: {\\"note\\":64,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":507.8125,\\"gain\\":0.9166666666666666}",
-  "0/1 -> 1/6: {\\"note\\":53.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":507.8125,\\"gain\\":0.9166666666666666}",
-  "0/1 -> 1/6: {\\"note\\":57.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":507.8125,\\"gain\\":0.9166666666666666}",
-  "0/1 -> 1/6: {\\"note\\":60.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":507.8125,\\"gain\\":0.9166666666666666}",
-  "0/1 -> 1/6: {\\"note\\":64.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":507.8125,\\"gain\\":0.9166666666666666}",
-  "1/6 -> 1/3: {\\"note\\":53,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":523.4375,\\"gain\\":0.75}",
-  "1/6 -> 1/3: {\\"note\\":57,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":523.4375,\\"gain\\":0.75}",
-  "1/6 -> 1/3: {\\"note\\":60,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":523.4375,\\"gain\\":0.75}",
-  "1/6 -> 1/3: {\\"note\\":64,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":523.4375,\\"gain\\":0.75}",
-  "1/6 -> 1/3: {\\"note\\":53.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":523.4375,\\"gain\\":0.75}",
-  "1/6 -> 1/3: {\\"note\\":57.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":523.4375,\\"gain\\":0.75}",
-  "1/6 -> 1/3: {\\"note\\":60.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":523.4375,\\"gain\\":0.75}",
-  "1/6 -> 1/3: {\\"note\\":64.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":523.4375,\\"gain\\":0.75}",
-  "1/3 -> 1/2: {\\"note\\":53,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":539.0625,\\"gain\\":0.5833333333333333}",
-  "1/3 -> 1/2: {\\"note\\":57,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":539.0625,\\"gain\\":0.5833333333333333}",
-  "1/3 -> 1/2: {\\"note\\":60,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":539.0625,\\"gain\\":0.5833333333333333}",
-  "1/3 -> 1/2: {\\"note\\":64,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":539.0625,\\"gain\\":0.5833333333333333}",
-  "1/3 -> 1/2: {\\"note\\":53.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":539.0625,\\"gain\\":0.5833333333333333}",
-  "1/3 -> 1/2: {\\"note\\":57.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":539.0625,\\"gain\\":0.5833333333333333}",
-  "1/3 -> 1/2: {\\"note\\":60.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":539.0625,\\"gain\\":0.5833333333333333}",
-  "1/3 -> 1/2: {\\"note\\":64.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":539.0625,\\"gain\\":0.5833333333333333}",
-  "1/2 -> 2/3: {\\"note\\":53,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":554.6875,\\"gain\\":0.41666666666666663}",
-  "1/2 -> 2/3: {\\"note\\":57,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":554.6875,\\"gain\\":0.41666666666666663}",
-  "1/2 -> 2/3: {\\"note\\":60,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":554.6875,\\"gain\\":0.41666666666666663}",
-  "1/2 -> 2/3: {\\"note\\":64,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":554.6875,\\"gain\\":0.41666666666666663}",
-  "1/2 -> 2/3: {\\"note\\":53.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":554.6875,\\"gain\\":0.41666666666666663}",
-  "1/2 -> 2/3: {\\"note\\":57.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":554.6875,\\"gain\\":0.41666666666666663}",
-  "1/2 -> 2/3: {\\"note\\":60.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":554.6875,\\"gain\\":0.41666666666666663}",
-  "1/2 -> 2/3: {\\"note\\":64.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":554.6875,\\"gain\\":0.41666666666666663}",
-  "2/3 -> 5/6: {\\"note\\":53,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":570.3125,\\"gain\\":0.25}",
-  "2/3 -> 5/6: {\\"note\\":57,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":570.3125,\\"gain\\":0.25}",
-  "2/3 -> 5/6: {\\"note\\":60,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":570.3125,\\"gain\\":0.25}",
-  "2/3 -> 5/6: {\\"note\\":64,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":570.3125,\\"gain\\":0.25}",
-  "2/3 -> 5/6: {\\"note\\":53.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":570.3125,\\"gain\\":0.25}",
-  "2/3 -> 5/6: {\\"note\\":57.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":570.3125,\\"gain\\":0.25}",
-  "2/3 -> 5/6: {\\"note\\":60.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":570.3125,\\"gain\\":0.25}",
-  "2/3 -> 5/6: {\\"note\\":64.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":570.3125,\\"gain\\":0.25}",
-  "5/6 -> 1/1: {\\"note\\":53,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":585.9375,\\"gain\\":0.08333333333333337}",
-  "5/6 -> 1/1: {\\"note\\":57,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":585.9375,\\"gain\\":0.08333333333333337}",
-  "5/6 -> 1/1: {\\"note\\":60,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":585.9375,\\"gain\\":0.08333333333333337}",
-  "5/6 -> 1/1: {\\"note\\":64,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":585.9375,\\"gain\\":0.08333333333333337}",
-  "5/6 -> 1/1: {\\"note\\":53.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":585.9375,\\"gain\\":0.08333333333333337}",
-  "5/6 -> 1/1: {\\"note\\":57.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":585.9375,\\"gain\\":0.08333333333333337}",
-  "5/6 -> 1/1: {\\"note\\":60.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":585.9375,\\"gain\\":0.08333333333333337}",
-  "5/6 -> 1/1: {\\"note\\":64.07793132476509,\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.05,\\"sustain\\":0.2,\\"cutoff\\":585.9375,\\"gain\\":0.08333333333333337}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 221 https://strudel.cc/?IPOyuRRkZaNr 1`] = `
-[
-  "0/1 -> 3/20: 0",
-  "0/1 -> 3/20: 3",
-  "3/4 -> 9/10: 1",
-  "3/4 -> 9/10: 4",
-  "0/1 -> 3/10: -8",
-  "3/8 -> 27/40: -8",
-  "3/4 -> 21/20: -7",
-  "0/1 -> 3/200: 12",
-  "3/4 -> 153/200: 11",
-  "0/1 -> 3/20: c2",
-  "747/1000 -> 1497/1000: c1",
-  "0/1 -> 3/8: c2",
-  "3/8 -> 3/4: c2",
-  "3/4 -> 9/8: c2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 222 https://strudel.cc/?fGbP7VOtCWWU 1`] = `
-[
-  "0/1 -> 1/8: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "0/1 -> 1/8: {\\"note\\":\\"B4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5787037037037037}",
-  "0/1 -> 1/8: {\\"note\\":\\"C5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5833333333333333}",
-  "0/1 -> 1/8: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "1/4 -> 3/8: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "1/4 -> 3/8: {\\"note\\":\\"B4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5787037037037037}",
-  "1/4 -> 3/8: {\\"note\\":\\"C5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5833333333333333}",
-  "1/4 -> 3/8: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "3/8 -> 1/2: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "3/8 -> 1/2: {\\"note\\":\\"B4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5787037037037037}",
-  "3/8 -> 1/2: {\\"note\\":\\"C5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5833333333333333}",
-  "3/8 -> 1/2: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "1/2 -> 5/8: {\\"note\\":\\"F4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5509259259259259}",
-  "1/2 -> 5/8: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "1/2 -> 5/8: {\\"note\\":\\"C5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5833333333333333}",
-  "1/2 -> 5/8: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "3/4 -> 7/8: {\\"note\\":\\"F4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5509259259259259}",
-  "3/4 -> 7/8: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "3/4 -> 7/8: {\\"note\\":\\"C5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5833333333333333}",
-  "3/4 -> 7/8: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "7/8 -> 1/1: {\\"note\\":\\"F4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5509259259259259}",
-  "7/8 -> 1/1: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "7/8 -> 1/1: {\\"note\\":\\"C5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5833333333333333}",
-  "7/8 -> 1/1: {\\"note\\":\\"E5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6018518518518519}",
-  "0/1 -> 1/24: {\\"note\\":\\"A2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.45833333333333337}",
-  "1/6 -> 5/24: {\\"note\\":\\"A2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.45833333333333337}",
-  "1/3 -> 3/8: {\\"note\\":\\"A2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.45833333333333337}",
-  "1/2 -> 13/24: {\\"note\\":\\"D2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.42592592592592593}",
-  "2/3 -> 17/24: {\\"note\\":\\"D2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.42592592592592593}",
-  "5/6 -> 7/8: {\\"note\\":\\"D2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.42592592592592593}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 223 https://strudel.cc/?4YKibw76FrRb 1`] = `
-[
-  "0/1 -> 1/2: {\\"note\\":\\"G3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5046296296296297}",
-  "0/1 -> 1/2: {\\"note\\":\\"B3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5231481481481481}",
-  "0/1 -> 1/2: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "0/1 -> 1/2: {\\"note\\":\\"E4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5462962962962963}",
-  "0/1 -> 1/16: {\\"note\\":\\"A2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.45833333333333337}",
-  "1/4 -> 5/16: {\\"note\\":\\"A2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.45833333333333337}",
-  "1/2 -> 9/16: {\\"note\\":\\"F2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.4398148148148148}",
-  "3/4 -> 13/16: {\\"note\\":\\"F2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.4398148148148148}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 224 https://strudel.cc/?7UmR7rJMSvWq 1`] = `
-[
-  "0/1 -> 1/2: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "0/1 -> 1/2: {\\"note\\":\\"D4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.537037037037037}",
-  "0/1 -> 1/2: {\\"note\\":\\"E4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5462962962962963}",
-  "0/1 -> 1/2: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "0/1 -> 1/4: {\\"note\\":\\"C2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.41666666666666663}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 225 https://strudel.cc/?N0a4wkk96WWE 1`] = `
-[
-  "0/1 -> 8/19: {\\"note\\":\\"C5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5833333333333333}",
-  "8/19 -> 16/19: {\\"note\\":\\"f5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6064814814814814}",
-  "16/19 -> 24/19: {\\"note\\":\\"f5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.6064814814814814}",
-  "0/1 -> 4/1: {\\"note\\":\\"c3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.4722222222222222}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 226 https://strudel.cc/?s8HiRvW_Rngj 1`] = `
-[
-  "0/1 -> 3053185/4904046: {\\"n\\":62,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3986.9405734726183}",
-  "0/1 -> 3053185/4904046: {\\"n\\":62,\\"s\\":\\"square\\",\\"cutoff\\":3986.9405734726183}",
-  "0/1 -> 3053185/4904046: {\\"n\\":62,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3986.9405734726183}",
-  "1/2 -> 7957231/9808092: {\\"n\\":50,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3942.3145276351606}",
-  "1/2 -> 7957231/9808092: {\\"n\\":50,\\"s\\":\\"square\\",\\"cutoff\\":3942.3145276351606}",
-  "3/4 -> 5204627/4904046: {\\"n\\":41,\\"s\\":\\"square\\",\\"cutoff\\":3897.7021140702864}",
-  "3/4 -> 5204627/4904046: {\\"n\\":41,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3858.612673535166}",
-  "0/1 -> 3053185/4904046: {\\"n\\":43,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3986.9405734726183}",
-  "0/1 -> 3053185/4904046: {\\"n\\":43,\\"s\\":\\"square\\",\\"cutoff\\":3986.9405734726183}",
-  "0/1 -> 3053185/4904046: {\\"n\\":43,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3986.9405734726183}",
-  "1/2 -> 2752604/2452023: {\\"n\\":69,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3924.645587531366}",
-  "1/2 -> 2752604/2452023: {\\"n\\":69,\\"s\\":\\"square\\",\\"cutoff\\":3924.645587531366}",
-  "1/2 -> 2752604/2452023: {\\"n\\":69,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3850.2031844444546}",
-  "-1/4 -> 3654347/9808092: {\\"n\\":48,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3995.31915093835}",
-  "-1/4 -> 3654347/9808092: {\\"n\\":48,\\"s\\":\\"square\\",\\"cutoff\\":3995.31915093835}",
-  "1/4 -> 8558393/9808092: {\\"n\\":74,\\"s\\":\\"square\\",\\"cutoff\\":3957.6603580168244}",
-  "1/4 -> 8558393/9808092: {\\"n\\":74,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3957.6603580168244}",
-  "1/4 -> 8558393/9808092: {\\"n\\":74,\\"s\\":\\"square\\",\\"cutoff\\":3957.6603580168244}",
-  "3/4 -> 5204627/4904046: {\\"n\\":62,\\"s\\":\\"square\\",\\"cutoff\\":3897.7021140702864}",
-  "3/4 -> 5204627/4904046: {\\"n\\":62,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3858.612673535166}",
-  "-1/4 -> 3654347/9808092: {\\"n\\":64,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3995.31915093835}",
-  "-1/4 -> 3654347/9808092: {\\"n\\":64,\\"s\\":\\"square\\",\\"cutoff\\":3995.31915093835}",
-  "1/4 -> 8558393/9808092: {\\"n\\":55,\\"s\\":\\"square\\",\\"cutoff\\":3957.6603580168244}",
-  "1/4 -> 8558393/9808092: {\\"n\\":55,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3957.6603580168244}",
-  "1/4 -> 8558393/9808092: {\\"n\\":55,\\"s\\":\\"square\\",\\"cutoff\\":3957.6603580168244}",
-  "3/4 -> 13462439/9808092: {\\"n\\":81,\\"s\\":\\"square\\",\\"cutoff\\":3897.7021140702864}",
-  "3/4 -> 13462439/9808092: {\\"n\\":81,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3813.515463898106}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 227 https://strudel.cc/?Z1ywkDoR6Tca 1`] = `
-[
-  "5833/7200 -> 19/18: {\\"n\\":\\"C#4\\",\\"s\\":\\"Overdriven Guitar: Guitar\\",\\"gain\\":0.2}",
-  "437/800 -> 19/24: {\\"n\\":\\"D#4\\",\\"s\\":\\"Overdriven Guitar: Guitar\\",\\"gain\\":0.2}",
-  "2033/7200 -> 19/36: {\\"n\\":\\"F4\\",\\"s\\":\\"Overdriven Guitar: Guitar\\",\\"gain\\":0.2}",
-  "133/7200 -> 19/72: {\\"n\\":\\"G4\\",\\"s\\":\\"Overdriven Guitar: Guitar\\",\\"gain\\":0.2}",
-  "5833/7200 -> 19/18: {\\"n\\":\\"c#5\\",\\"s\\":\\"Overdriven Guitar: Guitar\\",\\"gain\\":0.1}",
-  "437/800 -> 19/24: {\\"n\\":\\"d#5\\",\\"s\\":\\"Overdriven Guitar: Guitar\\",\\"gain\\":0.1}",
-  "2033/7200 -> 19/36: {\\"n\\":\\"f5\\",\\"s\\":\\"Overdriven Guitar: Guitar\\",\\"gain\\":0.1}",
-  "133/7200 -> 19/72: {\\"n\\":\\"g5\\",\\"s\\":\\"Overdriven Guitar: Guitar\\",\\"gain\\":0.1}",
-  "19/24 -> 19/12: {\\"n\\":57,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.25}",
-  "19/24 -> 19/12: {\\"n\\":61,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.25}",
-  "19/24 -> 19/12: {\\"n\\":52,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.25}",
-  "0/1 -> 19/24: {\\"n\\":59,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.25}",
-  "0/1 -> 19/24: {\\"n\\":63,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.25}",
-  "0/1 -> 19/24: {\\"n\\":54,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.25}",
-  "209/240 -> 19/12: {\\"n\\":\\"A1\\",\\"s\\":\\"Electric Bass (finger): Bass\\",\\"gain\\":0.3}",
-  "19/240 -> 19/24: {\\"n\\":\\"B1\\",\\"s\\":\\"Electric Bass (finger): Bass\\",\\"gain\\":0.3}",
-  "19/24 -> 19/18: {\\"s\\":\\"sn\\",\\"gain\\":0.25}",
-  "19/36 -> 19/24: {\\"s\\":\\"sn\\",\\"gain\\":0.25}",
-  "19/72 -> 19/36: {\\"s\\":\\"sn\\",\\"gain\\":0.25}",
-  "0/1 -> 19/72: {\\"s\\":\\"sn\\",\\"gain\\":0.25}",
-  "19/24 -> 19/18: {\\"s\\":\\"hh\\",\\"gain\\":0.25}",
-  "19/36 -> 19/24: {\\"s\\":\\"hh\\",\\"gain\\":0.25}",
-  "19/72 -> 19/36: {\\"s\\":\\"hh\\",\\"gain\\":0.25}",
-  "0/1 -> 19/72: {\\"s\\":\\"hh\\",\\"gain\\":0.25}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 228 https://strudel.cc/?eXyJ5cvdMxIl 1`] = `
-[
-  "0/1 -> 1/1: {\\"n\\":69,\\"s\\":\\"Church Organ: Organ\\",\\"gain\\":0.2}",
-  "0/1 -> 1/1: {\\"n\\":72,\\"s\\":\\"Church Organ: Organ\\",\\"gain\\":0.2}",
-  "0/1 -> 1/1: {\\"n\\":76,\\"s\\":\\"Church Organ: Organ\\",\\"gain\\":0.2}",
-  "0/1 -> 1/4: {\\"s\\":\\"bd\\",\\"gain\\":0.25}",
-  "1/4 -> 1/2: {\\"s\\":\\"bd\\",\\"gain\\":0.25}",
-  "1/2 -> 5/8: {\\"s\\":\\"cp\\",\\"gain\\":0.25}",
-  "7/8 -> 1/1: {\\"s\\":\\"cp\\",\\"gain\\":0.25}",
-  "0/1 -> 1/4: {\\"s\\":\\"hh\\",\\"gain\\":0.25}",
-  "1/4 -> 1/2: {\\"s\\":\\"hh\\",\\"gain\\":0.25}",
-  "1/2 -> 3/4: {\\"s\\":\\"hh\\",\\"gain\\":0.25}",
-  "3/4 -> 1/1: {\\"s\\":\\"hh\\",\\"gain\\":0.25}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 229 https://strudel.cc/?YSgSSFCioxs0 1`] = `
-[
-  "0/1 -> 1/1: {\\"n\\":69,\\"s\\":\\"Church Organ: Organ\\",\\"gain\\":0.2}",
-  "0/1 -> 1/1: {\\"n\\":72,\\"s\\":\\"Church Organ: Organ\\",\\"gain\\":0.2}",
-  "0/1 -> 1/1: {\\"n\\":76,\\"s\\":\\"Church Organ: Organ\\",\\"gain\\":0.2}",
-  "0/1 -> 1/4: {\\"s\\":\\"bd\\",\\"gain\\":0.25}",
-  "1/4 -> 1/2: {\\"s\\":\\"bd\\",\\"gain\\":0.25}",
-  "1/2 -> 5/8: {\\"s\\":\\"cp\\",\\"gain\\":0.25}",
-  "7/8 -> 1/1: {\\"s\\":\\"cp\\",\\"gain\\":0.25}",
-  "0/1 -> 1/4: {\\"s\\":\\"hh\\",\\"gain\\":0.25}",
-  "1/4 -> 1/2: {\\"s\\":\\"hh\\",\\"gain\\":0.25}",
-  "1/2 -> 3/4: {\\"s\\":\\"hh\\",\\"gain\\":0.25}",
-  "3/4 -> 1/1: {\\"s\\":\\"hh\\",\\"gain\\":0.25}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 230 https://strudel.cc/?lAIAC1TOD3zB 1`] = `
-[
-  "0/1 -> 1/2: c1",
-  "1/2 -> 1/1: c1",
-  "1/2 -> 1/1: c3",
-  "0/1 -> 1/4: C1",
-  "1/4 -> 1/2: C3",
-  "1/2 -> 3/4: C1",
-  "3/4 -> 1/1: C3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 231 https://strudel.cc/?LZ-aTB2xiaZ8 1`] = `
-[
-  "0/1 -> 3053185/4904046: {\\"n\\":62,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3986.9405734726183}",
-  "0/1 -> 3053185/4904046: {\\"n\\":62,\\"s\\":\\"square\\",\\"cutoff\\":3986.9405734726183}",
-  "0/1 -> 3053185/4904046: {\\"n\\":62,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3986.9405734726183}",
-  "1/2 -> 7957231/9808092: {\\"n\\":50,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3942.3145276351606}",
-  "1/2 -> 7957231/9808092: {\\"n\\":50,\\"s\\":\\"square\\",\\"cutoff\\":3942.3145276351606}",
-  "3/4 -> 5204627/4904046: {\\"n\\":41,\\"s\\":\\"square\\",\\"cutoff\\":3897.7021140702864}",
-  "3/4 -> 5204627/4904046: {\\"n\\":41,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3858.612673535166}",
-  "0/1 -> 3053185/4904046: {\\"n\\":43,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3986.9405734726183}",
-  "0/1 -> 3053185/4904046: {\\"n\\":43,\\"s\\":\\"square\\",\\"cutoff\\":3986.9405734726183}",
-  "0/1 -> 3053185/4904046: {\\"n\\":43,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3986.9405734726183}",
-  "1/2 -> 2752604/2452023: {\\"n\\":69,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3924.645587531366}",
-  "1/2 -> 2752604/2452023: {\\"n\\":69,\\"s\\":\\"square\\",\\"cutoff\\":3924.645587531366}",
-  "1/2 -> 2752604/2452023: {\\"n\\":69,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3850.2031844444546}",
-  "-1/4 -> 3654347/9808092: {\\"n\\":48,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3995.31915093835}",
-  "-1/4 -> 3654347/9808092: {\\"n\\":48,\\"s\\":\\"square\\",\\"cutoff\\":3995.31915093835}",
-  "1/4 -> 8558393/9808092: {\\"n\\":74,\\"s\\":\\"square\\",\\"cutoff\\":3957.6603580168244}",
-  "1/4 -> 8558393/9808092: {\\"n\\":74,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3957.6603580168244}",
-  "1/4 -> 8558393/9808092: {\\"n\\":74,\\"s\\":\\"square\\",\\"cutoff\\":3957.6603580168244}",
-  "3/4 -> 5204627/4904046: {\\"n\\":62,\\"s\\":\\"square\\",\\"cutoff\\":3897.7021140702864}",
-  "3/4 -> 5204627/4904046: {\\"n\\":62,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3858.612673535166}",
-  "-1/4 -> 3654347/9808092: {\\"n\\":64,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3995.31915093835}",
-  "-1/4 -> 3654347/9808092: {\\"n\\":64,\\"s\\":\\"square\\",\\"cutoff\\":3995.31915093835}",
-  "1/4 -> 8558393/9808092: {\\"n\\":55,\\"s\\":\\"square\\",\\"cutoff\\":3957.6603580168244}",
-  "1/4 -> 8558393/9808092: {\\"n\\":55,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3957.6603580168244}",
-  "1/4 -> 8558393/9808092: {\\"n\\":55,\\"s\\":\\"square\\",\\"cutoff\\":3957.6603580168244}",
-  "3/4 -> 13462439/9808092: {\\"n\\":81,\\"s\\":\\"square\\",\\"cutoff\\":3897.7021140702864}",
-  "3/4 -> 13462439/9808092: {\\"n\\":81,\\"s\\":\\"sawtooth\\",\\"cutoff\\":3813.515463898106}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 232 https://strudel.cc/?_zhepg-kT6fD 1`] = `
-[
-  "0/1 -> 3/8: {\\"s\\":\\"bd\\",\\"gain\\":0.14}",
-  "3/8 -> 3/4: {\\"s\\":\\"bd\\",\\"gain\\":0.14}",
-  "3/4 -> 3/2: {\\"s\\":\\"hh\\",\\"gain\\":0.14}",
-  "0/1 -> 3/20: {\\"note\\":\\"C2\\",\\"s\\":\\"square\\",\\"cutoff\\":400,\\"decay\\":0.12,\\"sustain\\":0}",
-  "3/8 -> 21/40: {\\"note\\":\\"A1\\",\\"s\\":\\"square\\",\\"cutoff\\":400,\\"decay\\":0.12,\\"sustain\\":0}",
-  "3/4 -> 9/10: {\\"note\\":\\"Bb1\\",\\"s\\":\\"square\\",\\"cutoff\\":400,\\"decay\\":0.12,\\"sustain\\":0}",
-  "3/16 -> 27/80: {\\"note\\":\\"C2\\",\\"s\\":\\"square\\",\\"cutoff\\":400,\\"decay\\":0.12,\\"sustain\\":0}",
-  "9/16 -> 57/80: {\\"note\\":\\"A1\\",\\"s\\":\\"square\\",\\"cutoff\\":400,\\"decay\\":0.12,\\"sustain\\":0}",
-  "15/16 -> 87/80: {\\"note\\":\\"Bb1\\",\\"s\\":\\"square\\",\\"cutoff\\":400,\\"decay\\":0.12,\\"sustain\\":0}",
-  "0/1 -> 3/20: {\\"note\\":\\"G2\\"}",
-  "0/1 -> 3/40: {\\"note\\":\\"C3\\"}",
-  "3/4 -> 33/40: {\\"note\\":\\"Eb3\\"}",
-  "-15/16 -> -63/80: {\\"note\\":\\"Db\\"}",
-  "-3/16 -> -9/80: {\\"note\\":\\"A\\"}",
-  "3/16 -> 27/80: {\\"note\\":\\"Db\\"}",
-  "3/16 -> 21/80: {\\"note\\":\\"Gb\\"}",
-  "15/16 -> 81/80: {\\"note\\":\\"A\\"}",
-  "-3/4 -> -3/5: {\\"note\\":\\"G\\"}",
-  "0/1 -> 3/40: {\\"note\\":\\"Eb\\"}",
-  "3/8 -> 21/40: {\\"note\\":\\"G\\"}",
-  "3/8 -> 9/20: {\\"note\\":\\"C\\"}",
-  "-9/16 -> -33/80: {\\"note\\":\\"Db\\"}",
-  "-9/16 -> -39/80: {\\"note\\":\\"Gb\\"}",
-  "3/16 -> 21/80: {\\"note\\":\\"A\\"}",
-  "9/16 -> 57/80: {\\"note\\":\\"Db\\"}",
-  "9/16 -> 51/80: {\\"note\\":\\"Gb\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 234 https://strudel.cc/?1moEu58ZjMF4 1`] = `
-[
-  "0/1 -> 1/2: {\\"note\\":\\"c2\\",\\"s\\":\\"square\\",\\"attack\\":0.1,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":0.1}",
-  "1/2 -> 1/1: {\\"note\\":\\"eb2\\",\\"s\\":\\"square\\",\\"attack\\":0.1,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":0.1}",
-  "0/1 -> 1/2: {\\"s\\":\\"bd\\",\\"crush\\":16}",
-  "0/1 -> 1/2: {\\"s\\":\\"bd\\",\\"crush\\":8}",
-  "0/1 -> 1/4: {\\"s\\":\\"hh\\",\\"crush\\":16}",
-  "1/4 -> 1/2: {\\"s\\":\\"hh\\",\\"crush\\":8}",
-  "1/2 -> 1/1: {\\"s\\":\\"sd\\",\\"crush\\":7}",
-  "1/2 -> 1/1: {\\"s\\":\\"sd\\",\\"crush\\":6}",
-  "1/2 -> 3/4: {\\"s\\":\\"hh\\",\\"crush\\":7}",
-  "3/4 -> 1/1: {\\"s\\":\\"hh\\",\\"crush\\":6}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 235 https://strudel.cc/?1W8nlZAFzi5T 1`] = `
-[
-  "0/1 -> 1/1: {\\"note\\":\\"c2\\",\\"s\\":\\"square\\",\\"attack\\":0.1,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":0.1}",
-  "0/1 -> 1/2: {\\"s\\":\\"bd\\",\\"crush\\":16}",
-  "0/1 -> 1/2: {\\"s\\":\\"bd\\",\\"crush\\":8}",
-  "0/1 -> 1/4: {\\"s\\":\\"hh\\",\\"crush\\":16}",
-  "1/4 -> 1/2: {\\"s\\":\\"hh\\",\\"crush\\":8}",
-  "1/2 -> 1/1: {\\"s\\":\\"sd\\",\\"crush\\":7}",
-  "1/2 -> 1/1: {\\"s\\":\\"sd\\",\\"crush\\":6}",
-  "1/2 -> 3/4: {\\"s\\":\\"hh\\",\\"crush\\":7}",
-  "3/4 -> 1/1: {\\"s\\":\\"hh\\",\\"crush\\":6}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 236 https://strudel.cc/?exwhYw9VYVQz 1`] = `
-[
-  "0/1 -> 1/1: {\\"note\\":\\"c2\\",\\"s\\":\\"square\\",\\"attack\\":0.1,\\"decay\\":0.1,\\"sustain\\":0.2,\\"release\\":0.1}",
-  "0/1 -> 1/2: {\\"s\\":\\"bd\\",\\"crush\\":16}",
-  "0/1 -> 1/2: {\\"s\\":\\"bd\\",\\"crush\\":8}",
-  "0/1 -> 1/4: {\\"s\\":\\"hh\\",\\"crush\\":16}",
-  "1/4 -> 1/2: {\\"s\\":\\"hh\\",\\"crush\\":8}",
-  "1/2 -> 1/1: {\\"s\\":\\"sd\\",\\"crush\\":7}",
-  "1/2 -> 1/1: {\\"s\\":\\"sd\\",\\"crush\\":6}",
-  "1/2 -> 3/4: {\\"s\\":\\"hh\\",\\"crush\\":7}",
-  "3/4 -> 1/1: {\\"s\\":\\"hh\\",\\"crush\\":6}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 237 https://strudel.cc/?z4zPoaRLF6Vs 1`] = `
-[
-  "0/1 -> 2/5: {\\"note\\":\\"c3\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.2,\\"sustain\\":0.3,\\"release\\":0.1,\\"bandf\\":500,\\"bandq\\":1}",
-  "2/5 -> 4/5: {\\"note\\":\\"c3\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.2,\\"sustain\\":0.3,\\"release\\":0.1,\\"bandf\\":500,\\"bandq\\":1}",
-  "4/5 -> 8/5: {\\"note\\":\\"g3\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.2,\\"sustain\\":0.3,\\"release\\":0.1,\\"bandf\\":500,\\"bandq\\":1}",
-  "0/1 -> 4/1: {\\"note\\":\\"c2\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.2,\\"sustain\\":0.3,\\"release\\":0.1,\\"bandf\\":500,\\"bandq\\":1}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 238 https://strudel.cc/?VzJokumWaip_ 1`] = `
-[
-  "3/4 -> 1/1: {\\"s\\":\\"bd\\"}",
-  "1/2 -> 3/4: {\\"s\\":\\"bd\\"}",
-  "1/4 -> 1/2: {\\"s\\":\\"bd\\"}",
-  "1/8 -> 1/4: {\\"s\\":\\"bd\\"}",
-  "0/1 -> 1/8: {\\"s\\":\\"bd\\"}",
-  "3/4 -> 1/1: {\\"s\\":\\"hh\\"}",
-  "1/2 -> 3/4: {\\"s\\":\\"hh\\"}",
-  "3/8 -> 1/2: {\\"s\\":\\"hh\\"}",
-  "1/4 -> 3/8: {\\"s\\":\\"hh\\"}",
-  "1/8 -> 1/4: {\\"s\\":\\"hh\\"}",
-  "0/1 -> 1/8: {\\"s\\":\\"hh\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 239 https://strudel.cc/?gb4pffOZyATk 1`] = `
-[
-  "4/5 -> 1/1: {\\"s\\":\\"bd\\",\\"cutoff\\":200,\\"resonance\\":30}",
-  "4/5 -> 1/1: {\\"s\\":\\"bd\\",\\"cutoff\\":100,\\"resonance\\":30}",
-  "2/5 -> 4/5: {\\"s\\":\\"bd\\",\\"cutoff\\":1000,\\"resonance\\":10}",
-  "2/5 -> 4/5: {\\"s\\":\\"bd\\",\\"cutoff\\":500,\\"resonance\\":20}",
-  "2/5 -> 4/5: {\\"s\\":\\"bd\\",\\"cutoff\\":200,\\"resonance\\":20}",
-  "2/5 -> 4/5: {\\"s\\":\\"bd\\",\\"cutoff\\":200,\\"resonance\\":30}",
-  "1/5 -> 2/5: {\\"s\\":\\"bd\\",\\"cutoff\\":2000,\\"resonance\\":0}",
-  "1/5 -> 2/5: {\\"s\\":\\"bd\\",\\"cutoff\\":2000,\\"resonance\\":10}",
-  "1/5 -> 2/5: {\\"s\\":\\"bd\\",\\"cutoff\\":1000,\\"resonance\\":10}",
-  "1/10 -> 1/5: {\\"s\\":\\"bd\\",\\"cutoff\\":4000,\\"resonance\\":0}",
-  "1/10 -> 1/5: {\\"s\\":\\"bd\\",\\"cutoff\\":2000,\\"resonance\\":0}",
-  "0/1 -> 1/10: {\\"s\\":\\"bd\\",\\"cutoff\\":4000,\\"resonance\\":0}",
-  "3/4 -> 1/1: {\\"s\\":\\"hh\\",\\"cutoff\\":200,\\"resonance\\":30}",
-  "3/4 -> 1/1: {\\"s\\":\\"hh\\",\\"cutoff\\":100,\\"resonance\\":30}",
-  "1/2 -> 3/4: {\\"s\\":\\"hh\\",\\"cutoff\\":500,\\"resonance\\":20}",
-  "1/2 -> 3/4: {\\"s\\":\\"hh\\",\\"cutoff\\":200,\\"resonance\\":20}",
-  "3/8 -> 1/2: {\\"s\\":\\"hh\\",\\"cutoff\\":1000,\\"resonance\\":10}",
-  "1/4 -> 3/8: {\\"s\\":\\"hh\\",\\"cutoff\\":2000,\\"resonance\\":10}",
-  "1/4 -> 3/8: {\\"s\\":\\"hh\\",\\"cutoff\\":1000,\\"resonance\\":10}",
-  "1/8 -> 1/4: {\\"s\\":\\"hh\\",\\"cutoff\\":4000,\\"resonance\\":0}",
-  "1/8 -> 1/4: {\\"s\\":\\"hh\\",\\"cutoff\\":2000,\\"resonance\\":0}",
-  "0/1 -> 1/8: {\\"s\\":\\"hh\\",\\"cutoff\\":4000,\\"resonance\\":0}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 240 https://strudel.cc/?C6vcsMx8UtjJ 1`] = `
-[
-  "0/1 -> 1/8: C2",
-  "1/8 -> 1/4: D2",
-  "1/4 -> 3/8: D2",
-  "3/8 -> 1/2: E2",
-  "1/2 -> 5/8: F2",
-  "5/8 -> 3/4: A2",
-  "3/4 -> 7/8: D3",
-  "7/8 -> 1/1: B3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 241 https://strudel.cc/?jyNjgy-bZ0X7 1`] = `
-[
-  "0/1 -> 3/16: {\\"s\\":\\"bd\\",\\"gain\\":0.7}",
-  "3/16 -> 3/8: {\\"s\\":\\"bd\\",\\"gain\\":0.7}",
-  "3/8 -> 3/4: {\\"s\\":\\"hh\\",\\"gain\\":0.7}",
-  "3/4 -> 9/8: {\\"s\\":\\"sn\\",\\"gain\\":0.7}",
-  "0/1 -> 3/20: {\\"note\\":\\"C2\\",\\"s\\":\\"square\\",\\"cutoff\\":400,\\"decay\\":0.12,\\"sustain\\":0}",
-  "3/8 -> 21/40: {\\"note\\":\\"A1\\",\\"s\\":\\"square\\",\\"cutoff\\":400,\\"decay\\":0.12,\\"sustain\\":0}",
-  "3/4 -> 9/10: {\\"note\\":\\"Bb1\\",\\"s\\":\\"square\\",\\"cutoff\\":400,\\"decay\\":0.12,\\"sustain\\":0}",
-  "3/16 -> 27/80: {\\"note\\":\\"C2\\",\\"s\\":\\"square\\",\\"cutoff\\":400,\\"decay\\":0.12,\\"sustain\\":0}",
-  "9/16 -> 57/80: {\\"note\\":\\"A1\\",\\"s\\":\\"square\\",\\"cutoff\\":400,\\"decay\\":0.12,\\"sustain\\":0}",
-  "15/16 -> 87/80: {\\"note\\":\\"Bb1\\",\\"s\\":\\"square\\",\\"cutoff\\":400,\\"decay\\":0.12,\\"sustain\\":0}",
-  "0/1 -> 3/20: {\\"note\\":\\"G2\\"}",
-  "0/1 -> 3/40: {\\"note\\":\\"C3\\"}",
-  "3/4 -> 33/40: {\\"note\\":\\"Eb3\\"}",
-  "-15/16 -> -63/80: {\\"note\\":\\"G3\\"}",
-  "-3/16 -> -9/80: {\\"note\\":\\"Eb4\\"}",
-  "3/16 -> 27/80: {\\"note\\":\\"G3\\"}",
-  "3/16 -> 21/80: {\\"note\\":\\"C4\\"}",
-  "15/16 -> 81/80: {\\"note\\":\\"Eb4\\"}",
-  "-3/4 -> -3/5: {\\"note\\":\\"G4\\"}",
-  "0/1 -> 3/40: {\\"note\\":\\"Eb5\\"}",
-  "3/8 -> 21/40: {\\"note\\":\\"G4\\"}",
-  "3/8 -> 9/20: {\\"note\\":\\"C5\\"}",
-  "-9/16 -> -33/80: {\\"note\\":\\"G5\\"}",
-  "-9/16 -> -39/80: {\\"note\\":\\"C6\\"}",
-  "3/16 -> 21/80: {\\"note\\":\\"Eb6\\"}",
-  "9/16 -> 57/80: {\\"note\\":\\"G5\\"}",
-  "9/16 -> 51/80: {\\"note\\":\\"C6\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 242 https://strudel.cc/?MPVT_kG6Yni7 1`] = `
-[
-  "0/1 -> 2/1: {\\"note\\":\\"c1\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.2,\\"sustain\\":0.3,\\"release\\":0.1,\\"bandf\\":500,\\"bandq\\":1,\\"gain\\":3}",
-  "1/3 -> 1/1: {\\"s\\":\\"bd\\"}",
-  "0/1 -> 1/3: {\\"s\\":\\"bd\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 243 https://strudel.cc/?Ul_u7MyAGKXb 1`] = `
-[
-  "0/1 -> 1/40: {\\"n\\":62,\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000}",
-  "1/4 -> 21/80: {\\"n\\":51,\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000}",
-  "3/8 -> 31/80: {\\"n\\":41,\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000}",
-  "1/2 -> 21/40: {\\"n\\":50,\\"s\\":\\"square\\",\\"cutoff\\":2000}",
-  "3/4 -> 31/40: {\\"n\\":40,\\"s\\":\\"square\\",\\"cutoff\\":2000}",
-  "1/8 -> 3/20: {\\"n\\":83,\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000}",
-  "3/8 -> 31/80: {\\"n\\":72,\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000}",
-  "1/2 -> 41/80: {\\"n\\":62,\\"s\\":\\"square\\",\\"cutoff\\":2000}",
-  "5/8 -> 13/20: {\\"n\\":71,\\"s\\":\\"square\\",\\"cutoff\\":2000}",
-  "7/8 -> 9/10: {\\"n\\":61,\\"s\\":\\"square\\",\\"cutoff\\":2000}",
-  "0/1 -> 1/40: {\\"n\\":47,\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000}",
-  "1/4 -> 11/40: {\\"n\\":65,\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000}",
-  "1/2 -> 41/80: {\\"n\\":54,\\"s\\":\\"square\\",\\"cutoff\\":2000}",
-  "5/8 -> 51/80: {\\"n\\":44,\\"s\\":\\"square\\",\\"cutoff\\":2000}",
-  "3/4 -> 31/40: {\\"n\\":53,\\"s\\":\\"square\\",\\"cutoff\\":2000}",
-  "1/8 -> 3/20: {\\"n\\":68,\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000}",
-  "3/8 -> 2/5: {\\"n\\":86,\\"s\\":\\"sawtooth\\",\\"cutoff\\":2000}",
-  "5/8 -> 51/80: {\\"n\\":75,\\"s\\":\\"square\\",\\"cutoff\\":2000}",
-  "3/4 -> 61/80: {\\"n\\":65,\\"s\\":\\"square\\",\\"cutoff\\":2000}",
-  "7/8 -> 9/10: {\\"n\\":74,\\"s\\":\\"square\\",\\"cutoff\\":2000}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 244 https://strudel.cc/?6geTqvPlUvv4 1`] = `
-[
-  "0/1 -> 3/80: {\\"n\\":62,\\"s\\":\\"sine\\",\\"cutoff\\":1500}",
-  "1/4 -> 43/160: {\\"n\\":51,\\"s\\":\\"sine\\",\\"cutoff\\":1500}",
-  "3/8 -> 63/160: {\\"n\\":41,\\"s\\":\\"sine\\",\\"cutoff\\":1500}",
-  "1/2 -> 43/80: {\\"n\\":50,\\"s\\":\\"sine\\",\\"cutoff\\":1500}",
-  "3/4 -> 63/80: {\\"n\\":40,\\"s\\":\\"sine\\",\\"cutoff\\":1500}",
-  "1/8 -> 13/80: {\\"n\\":83,\\"s\\":\\"sine\\",\\"cutoff\\":1500}",
-  "3/8 -> 63/160: {\\"n\\":72,\\"s\\":\\"sine\\",\\"cutoff\\":1500}",
-  "1/2 -> 83/160: {\\"n\\":62,\\"s\\":\\"sine\\",\\"cutoff\\":1500}",
-  "5/8 -> 53/80: {\\"n\\":71,\\"s\\":\\"sine\\",\\"cutoff\\":1500}",
-  "7/8 -> 73/80: {\\"n\\":61,\\"s\\":\\"sine\\",\\"cutoff\\":1500}",
-  "0/1 -> 3/80: {\\"n\\":47,\\"s\\":\\"sine\\",\\"cutoff\\":1500}",
-  "1/4 -> 23/80: {\\"n\\":65,\\"s\\":\\"sine\\",\\"cutoff\\":1500}",
-  "1/2 -> 83/160: {\\"n\\":54,\\"s\\":\\"sine\\",\\"cutoff\\":1500}",
-  "5/8 -> 103/160: {\\"n\\":44,\\"s\\":\\"sine\\",\\"cutoff\\":1500}",
-  "3/4 -> 63/80: {\\"n\\":53,\\"s\\":\\"sine\\",\\"cutoff\\":1500}",
-  "1/8 -> 13/80: {\\"n\\":68,\\"s\\":\\"sine\\",\\"cutoff\\":1500}",
-  "3/8 -> 33/80: {\\"n\\":86,\\"s\\":\\"sine\\",\\"cutoff\\":1500}",
-  "5/8 -> 103/160: {\\"n\\":75,\\"s\\":\\"sine\\",\\"cutoff\\":1500}",
-  "3/4 -> 123/160: {\\"n\\":65,\\"s\\":\\"sine\\",\\"cutoff\\":1500}",
-  "7/8 -> 73/80: {\\"n\\":74,\\"s\\":\\"sine\\",\\"cutoff\\":1500}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 245 https://strudel.cc/?5-NpsIAJqGJX 1`] = `
-[
-  "0/1 -> 3/20: 0",
-  "0/1 -> 3/20: 3",
-  "3/4 -> 9/10: 1",
-  "3/4 -> 9/10: 4",
-  "0/1 -> 3/10: -8",
-  "3/8 -> 27/40: -8",
-  "3/4 -> 21/20: -7",
-  "0/1 -> 3/200: 12",
-  "3/4 -> 153/200: 11",
-  "0/1 -> 3/20: c2",
-  "747/1000 -> 1497/1000: c1",
-  "0/1 -> 3/8: c2",
-  "3/8 -> 3/4: c2",
-  "3/4 -> 9/8: c2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 248 https://strudel.cc/?FavmsfMCEJh9 1`] = `
-[
-  "0/1 -> 1/4: {\\"note\\":\\"C3\\"}",
-  "1/4 -> 1/2: {\\"note\\":\\"Eb3\\"}",
-  "1/2 -> 3/4: {\\"note\\":\\"G3\\"}",
-  "3/4 -> 1/1: {\\"note\\":\\"D4\\"}",
-  "0/1 -> 1/4: {\\"note\\":\\"Eb3\\"}",
-  "1/4 -> 1/2: {\\"note\\":\\"G3\\"}",
-  "1/2 -> 3/4: {\\"note\\":\\"Bb3\\"}",
-  "3/4 -> 1/1: {\\"note\\":\\"F4\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 249 https://strudel.cc/?KEJD5r4Q7zZo 1`] = `
-[
-  "0/1 -> 3/4: F4",
-  "0/1 -> 3/4: Bb4",
-  "0/1 -> 3/4: D5",
-  "3/4 -> 5/4: D4",
-  "3/4 -> 5/4: G4",
-  "3/4 -> 5/4: Bb4",
-  "0/1 -> 3/4: G3",
-  "3/4 -> 3/2: G3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 250 https://strudel.cc/?JzQ_9QyLrKhy 1`] = `
-[
-  "0/1 -> 1/3: bd",
-  "1/3 -> 2/3: hh",
-  "2/3 -> 1/1: sn",
-  "0/1 -> 1/20: G4",
-  "1/6 -> 13/60: G4",
-  "1/3 -> 23/60: B3",
-  "1/2 -> 11/20: B3",
-  "1/3 -> 23/60: E4",
-  "1/2 -> 11/20: E4",
-  "2/3 -> 43/60: G3",
-  "5/6 -> 53/60: G3",
-  "0/1 -> 4/3: c2",
-  "0/1 -> 4/3: c2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 251 https://strudel.cc/?H9-8RjyncjzI 1`] = `
-[
-  "0/1 -> 1/1: B3",
-  "0/1 -> 1/1: D4",
-  "0/1 -> 1/1: E4",
-  "0/1 -> 1/1: G4",
-  "0/1 -> 1/1: C3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 252 https://strudel.cc/?CG9iByv5zHY- 1`] = `
-[
-  "0/1 -> 1/3: 48",
-  "1/3 -> 2/3: 51",
-  "2/3 -> 1/1: 55",
-]
-`;
-
-exports[`renders shared tunes > shared tune 253 https://strudel.cc/?FgUTcaG_XKGK 1`] = `
-[
-  "0/1 -> 1/4: 48",
-  "1/4 -> 1/2: 51",
-  "1/2 -> 3/4: 55",
-  "3/4 -> 1/1: 36",
-]
-`;
-
-exports[`renders shared tunes > shared tune 254 https://strudel.cc/?CmY3ebvIfYEG 1`] = `
-[
-  "0/1 -> 1/10: C3",
-  "0/1 -> 1/10: E3",
-  "0/1 -> 1/10: G3",
-  "1/4 -> 7/20: B3",
-  "1/4 -> 7/20: E4",
-  "1/4 -> 7/20: E3",
-  "1/2 -> 3/5: C3",
-  "1/2 -> 3/5: A2",
-  "1/2 -> 3/5: C3",
-  "3/4 -> 17/20: E3",
-  "3/4 -> 17/20: G3",
-  "3/4 -> 17/20: B3",
-  "0/1 -> 1/5: C2",
-  "1/2 -> 7/10: E2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 255 https://strudel.cc/?yNx4koGpPrSH 1`] = `
-[
-  "0/1 -> 6275565/1452119: A3",
-  "-9/8 -> 20400609/11616952: G4",
-  "3/8 -> 54560877/11616952: D4",
-  "-3/4 -> 12378483/5808476: F5",
-  "3/4 -> 29458617/5808476: G4",
-  "0/1 -> 3/2: D2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 256 https://strudel.cc/?oBtcxYrbZlNG 1`] = `
-[
-  "0/1 -> 1/2: {\\"note\\":\\"D3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.4814814814814815}",
-  "1/4 -> 3/4: {\\"note\\":\\"F3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.49537037037037035}",
-  "0/1 -> 1/4: {\\"note\\":\\"F4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5509259259259259}",
-  "1/2 -> 1/1: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "1/4 -> 1/2: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "3/4 -> 5/4: {\\"note\\":\\"E4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5462962962962963}",
-  "-1/8 -> 1/8: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "-1/8 -> 1/8: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "1/8 -> 5/8: {\\"note\\":\\"D3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.4814814814814815}",
-  "3/8 -> 7/8: {\\"note\\":\\"F3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.49537037037037035}",
-  "1/8 -> 3/8: {\\"note\\":\\"F4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5509259259259259}",
-  "5/8 -> 9/8: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "3/8 -> 5/8: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "7/8 -> 11/8: {\\"note\\":\\"E4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5462962962962963}",
-  "0/1 -> 1/4: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "0/1 -> 1/4: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "1/4 -> 3/4: {\\"note\\":\\"D3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.4814814814814815}",
-  "1/2 -> 1/1: {\\"note\\":\\"F3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.49537037037037035}",
-  "1/4 -> 1/2: {\\"note\\":\\"F4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5509259259259259}",
-  "3/4 -> 5/4: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "1/2 -> 3/4: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "-1/8 -> 1/8: {\\"note\\":\\"G3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5046296296296297}",
-  "1/8 -> 3/8: {\\"note\\":\\"Bb3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5185185185185186}",
-  "-1/8 -> 1/8: {\\"note\\":\\"F4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5509259259259259}",
-  "1/8 -> 3/8: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "3/8 -> 7/8: {\\"note\\":\\"D3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.4814814814814815}",
-  "5/8 -> 9/8: {\\"note\\":\\"F3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.49537037037037035}",
-  "3/8 -> 5/8: {\\"note\\":\\"F4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5509259259259259}",
-  "7/8 -> 11/8: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "5/8 -> 7/8: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 257 https://strudel.cc/?eCz4nyUk3TnN 1`] = `
-[
-  "0/1 -> 3/1: {\\"n\\":\\"B3\\",\\"s\\":\\"0040_FluidR3_GM_sf2_file\\",\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.7,\\"cutoff\\":1111.7252990603447,\\"gain\\":0.3}",
-  "0/1 -> 3/1: {\\"n\\":\\"D4\\",\\"s\\":\\"0040_FluidR3_GM_sf2_file\\",\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.7,\\"cutoff\\":1111.7252990603447,\\"gain\\":0.3}",
-  "0/1 -> 3/1: {\\"n\\":\\"E4\\",\\"s\\":\\"0040_FluidR3_GM_sf2_file\\",\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.7,\\"cutoff\\":1111.7252990603447,\\"gain\\":0.3}",
-  "0/1 -> 3/1: {\\"n\\":\\"G4\\",\\"s\\":\\"0040_FluidR3_GM_sf2_file\\",\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.7,\\"cutoff\\":1111.7252990603447,\\"gain\\":0.3}",
-  "0/1 -> 9/2: {\\"n\\":\\"C5\\",\\"s\\":\\"0040_FluidR3_GM_sf2_file\\",\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.7,\\"cutoff\\":1111.7252990603447,\\"gain\\":0.3}",
-  "0/1 -> 3/4: {\\"n\\":\\"C2\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0.05,\\"decay\\":0.1,\\"sustain\\":0.7,\\"cutoff\\":864.536878321087,\\"gain\\":0.3}",
-  "0/1 -> 3/4: {\\"s\\":\\"bd\\",\\"speed\\":0.9107561463868479,\\"n\\":3}",
-  "3/4 -> 3/2: {\\"s\\":\\"sd\\",\\"speed\\":0.9931522866332672,\\"n\\":3}",
-  "0/1 -> 1/2: {\\"s\\":\\"hh\\",\\"speed\\":0.9036881079621337,\\"n\\":3}",
-  "1/2 -> 1/1: {\\"s\\":\\"hh\\",\\"speed\\":0.9519542165100575,\\"n\\":3}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 259 https://strudel.cc/?J3FcQgOeZ3cV 1`] = `
-[
-  "0/1 -> 5/26: {\\"note\\":\\"B2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.46759259259259256}",
-  "5/13 -> 15/26: {\\"note\\":\\"B2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.46759259259259256}",
-  "10/13 -> 155/156: {\\"note\\":\\"B2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.46759259259259256}",
-  "155/156 -> 15/13: {\\"note\\":\\"A2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.45833333333333337}",
-  "0/1 -> 15/26: {\\"note\\":\\"B3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5231481481481481}",
-  "5/52 -> 35/52: {\\"note\\":\\"C#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5324074074074074}",
-  "5/26 -> 10/13: {\\"note\\":\\"D#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "15/52 -> 45/52: {\\"note\\":\\"F4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5509259259259259}",
-  "5/13 -> 25/26: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "25/52 -> 55/52: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "15/26 -> 15/13: {\\"note\\":\\"B4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5787037037037037}",
-  "35/52 -> 5/4: {\\"note\\":\\"C#5\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.587962962962963}",
-  "5/13 -> 25/26: {\\"note\\":\\"B3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5231481481481481}",
-  "25/52 -> 55/52: {\\"note\\":\\"C#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5324074074074074}",
-  "15/26 -> 15/13: {\\"note\\":\\"D#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "35/52 -> 5/4: {\\"note\\":\\"F4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5509259259259259}",
-  "10/13 -> 35/26: {\\"note\\":\\"G4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5601851851851851}",
-  "45/52 -> 75/52: {\\"note\\":\\"A4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5694444444444444}",
-  "25/26 -> 20/13: {\\"note\\":\\"B4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5787037037037037}",
-  "10/13 -> 35/26: {\\"note\\":\\"B3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5231481481481481}",
-  "45/52 -> 75/52: {\\"note\\":\\"C#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5324074074074074}",
-  "25/26 -> 20/13: {\\"note\\":\\"D#4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5416666666666667}",
-  "0/1 -> 80/13: {\\"s\\":\\"mad\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 260 https://strudel.cc/?tTlyA1JzHklU 1`] = `
-[
-  "0/1 -> 4/3: B4",
-  "0/1 -> 1/3: C3",
-  "1/3 -> 2/3: G3",
-  "2/3 -> 2/1: E4",
-]
-`;
-
-exports[`renders shared tunes > shared tune 261 https://strudel.cc/?hIhmX2R9gtwL 1`] = `
-[
-  "0/1 -> 1/8: {\\"note\\":\\"c2\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"release\\":0.3,\\"vowel\\":\\"a\\"}",
-  "1/2 -> 5/8: {\\"note\\":\\"c2\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"release\\":0.3,\\"vowel\\":\\"o\\"}",
-  "0/1 -> 1/8: {\\"note\\":\\"c3\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"release\\":0.3,\\"vowel\\":\\"a\\"}",
-  "3/8 -> 1/2: {\\"note\\":\\"c3\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"release\\":0.3,\\"vowel\\":\\"a\\"}",
-  "3/4 -> 7/8: {\\"note\\":\\"c3\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"release\\":0.3,\\"vowel\\":\\"o\\"}",
-  "0/1 -> 3/8: {\\"note\\":\\"C1\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0,\\"release\\":0.3,\\"cutoff\\":200}",
-  "0/1 -> 3/8: {\\"note\\":\\"C1\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0,\\"release\\":0.3,\\"cutoff\\":300}",
-  "3/8 -> 3/4: {\\"note\\":\\"G2\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0,\\"release\\":0.3,\\"cutoff\\":300}",
-  "3/8 -> 3/4: {\\"note\\":\\"G2\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0,\\"release\\":0.3,\\"cutoff\\":100}",
-  "1/6 -> 1/3: {\\"note\\":\\"c2\\",\\"s\\":\\"sd\\"}",
-  "1/6 -> 1/3: {\\"note\\":\\"c2\\",\\"s\\":\\"bd\\"}",
-  "1/3 -> 1/2: {\\"note\\":\\"c2\\",\\"s\\":\\"bd\\"}",
-  "1/3 -> 1/2: {\\"note\\":\\"c2\\",\\"s\\":\\"sd\\"}",
-  "5/6 -> 1/1: {\\"note\\":\\"c#2\\",\\"s\\":\\"bd\\"}",
-  "1/12 -> 1/6: {\\"note\\":\\"c2\\",\\"s\\":\\"hh\\"}",
-  "1/6 -> 1/4: {\\"note\\":\\"c2\\",\\"s\\":\\"hh\\"}",
-  "2/3 -> 3/4: {\\"note\\":\\"c2\\",\\"s\\":\\"oh\\"}",
-  "3/4 -> 5/6: {\\"note\\":\\"c2\\",\\"s\\":\\"oh\\"}",
-  "1/4 -> 1/3: {\\"note\\":\\"c2\\",\\"s\\":\\"hh\\",\\"speed\\":0.5}",
-  "7/12 -> 2/3: {\\"note\\":\\"c2\\",\\"s\\":\\"oh\\",\\"speed\\":0.5}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 262 https://strudel.cc/?NIL21RJTmuAa 1`] = `
-[
-  "0/1 -> 1/2: Bb2",
-  "0/1 -> 1/2: F3",
-  "0/1 -> 1/2: Bb3",
-  "1/2 -> 1/1: Bb2",
-  "1/2 -> 1/1: Bb2",
-  "1/2 -> 1/1: F3",
-  "1/2 -> 1/1: F3",
-  "1/2 -> 1/1: Bb3",
-  "1/2 -> 1/1: Bb3",
-  "0/1 -> 1/2: Bb1",
-  "1/2 -> 5/8: Bb1",
-  "3/4 -> 7/8: Bb1",
-  "0/1 -> 1/2: c1",
-  "1/2 -> 1/1: c1",
-  "1/2 -> 1/1: c3",
-  "0/1 -> 1/4: C1",
-  "1/4 -> 1/2: C3",
-  "1/2 -> 3/4: C1",
-  "3/4 -> 1/1: C3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 263 https://strudel.cc/?CGh4oLKu9tOp 1`] = `
-[
-  "0/1 -> 4/3: B4",
-  "0/1 -> 1/3: C3",
-  "1/3 -> 2/3: G3",
-  "2/3 -> 2/1: E4",
-]
-`;
-
-exports[`renders shared tunes > shared tune 264 https://strudel.cc/?N486QfFJ2NvV 1`] = `
-[
-  "0/1 -> 1/8: {\\"freq\\":55.33,\\"s\\":\\"sawtooth\\"}",
-  "0/1 -> 1/8: {\\"freq\\":54.725,\\"s\\":\\"sawtooth\\"}",
-  "3/8 -> 1/2: {\\"freq\\":110.66,\\"s\\":\\"sawtooth\\"}",
-  "3/8 -> 1/2: {\\"freq\\":109.45,\\"s\\":\\"sawtooth\\"}",
-  "3/8 -> 1/2: {\\"freq\\":165.99,\\"s\\":\\"sawtooth\\"}",
-  "3/8 -> 1/2: {\\"freq\\":164.175,\\"s\\":\\"sawtooth\\"}",
-  "3/4 -> 7/8: {\\"freq\\":221.32,\\"s\\":\\"sawtooth\\"}",
-  "3/4 -> 7/8: {\\"freq\\":218.9,\\"s\\":\\"sawtooth\\"}",
-  "3/4 -> 7/8: {\\"freq\\":276.65,\\"s\\":\\"sawtooth\\"}",
-  "3/4 -> 7/8: {\\"freq\\":273.625,\\"s\\":\\"sawtooth\\"}",
-  "1/8 -> 59/400: {\\"freq\\":440,\\"gain\\":0.206361035083454,\\"s\\":\\"sawtooth\\"}",
-  "1/4 -> 109/400: {\\"freq\\":440,\\"gain\\":0.2360775017902398,\\"s\\":\\"sawtooth\\"}",
-  "1/2 -> 209/400: {\\"freq\\":440,\\"gain\\":0.3624358861780295,\\"s\\":\\"sawtooth\\"}",
-  "5/8 -> 259/400: {\\"freq\\":440,\\"gain\\":0.4316442271311083,\\"s\\":\\"sawtooth\\"}",
-  "7/8 -> 359/400: {\\"freq\\":440,\\"gain\\":0.5078844826422588,\\"s\\":\\"sawtooth\\"}",
-  "0/1 -> 1/8: {\\"s\\":\\"bd\\"}",
-  "3/8 -> 1/2: {\\"s\\":\\"bd\\"}",
-  "3/4 -> 7/8: {\\"s\\":\\"bd\\"}",
-  "0/1 -> 1/4: {\\"s\\":\\"hh\\"}",
-  "1/4 -> 1/2: {\\"s\\":\\"hh\\"}",
-  "1/2 -> 3/4: {\\"s\\":\\"hh\\"}",
-  "3/4 -> 1/1: {\\"s\\":\\"hh\\"}",
-  "1/2 -> 1/1: {\\"s\\":\\"sd\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 265 https://strudel.cc/?Njas64Vf03LO 1`] = `
-[
-  "0/1 -> 5/11: {\\"note\\":\\"c2\\",\\"s\\":\\"sawtooth\\",\\"vowel\\":\\"a\\",\\"gain\\":1.1882154262966047,\\"delay\\":0.1}",
-  "5/11 -> 15/11: {\\"note\\":\\"eb2\\",\\"s\\":\\"sawtooth\\",\\"vowel\\":\\"a\\",\\"gain\\":1.361256209529016,\\"delay\\":0.1}",
-  "10/11 -> 15/11: {\\"note\\":\\"c2\\",\\"s\\":\\"square\\",\\"vowel\\":\\"e\\",\\"gain\\":1.5242570631433978,\\"delay\\":0.1}",
-  "0/1 -> 5/11: {\\"note\\":\\"c1\\",\\"s\\":\\"sine\\",\\"shape\\":0.7,\\"gain\\":1.590884651807325,\\"delay\\":0.1}",
-  "5/11 -> 10/11: {\\"note\\":\\"eb1\\",\\"s\\":\\"sine\\",\\"shape\\":0.7,\\"gain\\":1.5196152422706635,\\"delay\\":0.1}",
-  "10/11 -> 15/11: {\\"note\\":\\"c1\\",\\"s\\":\\"sine\\",\\"shape\\":0.7,\\"gain\\":1.385672565811924,\\"delay\\":0.1}",
-  "0/1 -> 5/44: {\\"s\\":\\"hh\\",\\"pan\\":0.5,\\"gain\\":0.2,\\"delay\\":0.1}",
-  "5/44 -> 5/22: {\\"s\\":\\"hh\\",\\"pan\\":0.5,\\"speed\\":0.9,\\"gain\\":0.2,\\"delay\\":0.1}",
-  "5/22 -> 15/44: {\\"s\\":\\"hh\\",\\"pan\\":0.5,\\"speed\\":0.9,\\"gain\\":0.5,\\"delay\\":0.1}",
-  "15/44 -> 5/11: {\\"s\\":\\"hh\\",\\"pan\\":0.5,\\"speed\\":0.9,\\"gain\\":0.5,\\"delay\\":0.1}",
-  "5/11 -> 15/22: {\\"s\\":\\"hh\\",\\"pan\\":0.5,\\"speed\\":1.1,\\"gain\\":0.6,\\"delay\\":0.1}",
-  "15/22 -> 10/11: {\\"s\\":\\"hh\\",\\"pan\\":0.5,\\"speed\\":1.1,\\"gain\\":0.4,\\"delay\\":0.1}",
-  "10/11 -> 45/44: {\\"s\\":\\"hh\\",\\"pan\\":0.5,\\"speed\\":0.9,\\"gain\\":0.2,\\"delay\\":0.1}",
-  "0/1 -> 8/11: {\\"s\\":\\"bd\\",\\"delay\\":0.1}",
-  "8/11 -> 16/11: {\\"s\\":\\"bd\\",\\"delay\\":0.1}",
-  "8/11 -> 16/11: {\\"s\\":\\"bd\\",\\"delay\\":0.1}",
-  "0/1 -> 20/11: {\\"s\\":\\"misc\\",\\"n\\":13,\\"delay\\":0.1}",
-  "0/1 -> 20/11: {\\"s\\":\\"misc\\",\\"n\\":13,\\"delay\\":0.1}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 266 https://strudel.cc/?-qcqwVsJXv8J 1`] = `
-[
-  "0/1 -> 1/1: bd",
-  "0/1 -> 1/4: hh",
-  "1/4 -> 1/2: hh",
-  "1/2 -> 3/4: hh",
-  "3/4 -> 1/1: hh",
-  "1/2 -> 1/1: sn",
-]
-`;
-
-exports[`renders shared tunes > shared tune 267 https://strudel.cc/?Q2WQMrJVFb46 1`] = `
-[
-  "0/1 -> 5/11: {\\"note\\":\\"c2\\",\\"s\\":\\"sawtooth\\",\\"vowel\\":\\"a\\",\\"gain\\":0.2000348432426738,\\"delay\\":0.1}",
-  "5/11 -> 15/11: {\\"note\\":\\"eb2\\",\\"s\\":\\"sawtooth\\",\\"vowel\\":\\"a\\",\\"gain\\":0.20089674623394735,\\"delay\\":0.1}",
-  "10/11 -> 15/11: {\\"note\\":\\"c2\\",\\"s\\":\\"square\\",\\"vowel\\":\\"e\\",\\"gain\\":0.20395302623820533,\\"delay\\":0.1}",
-  "0/1 -> 5/11: {\\"note\\":\\"c1\\",\\"s\\":\\"sine\\",\\"shape\\":0.7,\\"gain\\":0.40012812116863894,\\"delay\\":0.1}",
-  "5/11 -> 10/11: {\\"note\\":\\"eb1\\",\\"s\\":\\"sine\\",\\"shape\\":0.7,\\"gain\\":0.40317197328808513,\\"delay\\":0.1}",
-  "10/11 -> 15/11: {\\"note\\":\\"c1\\",\\"s\\":\\"sine\\",\\"shape\\":0.7,\\"gain\\":0.4134168413561418,\\"delay\\":0.1}",
-  "0/1 -> 5/44: {\\"s\\":\\"hh\\",\\"pan\\":0.0011524725685347903,\\"gain\\":0.2,\\"delay\\":0.1}",
-  "5/44 -> 5/22: {\\"s\\":\\"hh\\",\\"pan\\":0.025337550391114405,\\"speed\\":0.9,\\"gain\\":0.2,\\"delay\\":0.1}",
-  "5/22 -> 15/44: {\\"s\\":\\"hh\\",\\"pan\\":0.09352072111390441,\\"speed\\":0.9,\\"gain\\":0.5,\\"delay\\":0.1}",
-  "15/44 -> 5/11: {\\"s\\":\\"hh\\",\\"pan\\":0.19951846897795633,\\"speed\\":0.9,\\"gain\\":0.5,\\"delay\\":0.1}",
-  "5/11 -> 15/22: {\\"s\\":\\"hh\\",\\"pan\\":0.3765602545513502,\\"speed\\":1.1,\\"gain\\":0.6,\\"delay\\":0.1}",
-  "15/22 -> 10/11: {\\"s\\":\\"hh\\",\\"pan\\":0.5112023464103004,\\"speed\\":1.1,\\"gain\\":0.4,\\"delay\\":0.1}",
-  "10/11 -> 45/44: {\\"s\\":\\"hh\\",\\"pan\\":0.5205181601692033,\\"speed\\":0.9,\\"gain\\":0.2,\\"delay\\":0.1}",
-  "0/1 -> 8/11: {\\"s\\":\\"bd:4\\",\\"delay\\":0.1}",
-  "8/11 -> 16/11: {\\"s\\":\\"bd:4\\",\\"delay\\":0.1}",
-  "8/11 -> 16/11: {\\"s\\":\\"bd:4\\",\\"delay\\":0.1}",
-  "0/1 -> 8/11: {\\"s\\":\\"bd:7\\",\\"delay\\":0.1}",
-  "0/1 -> 40/11: {\\"s\\":\\"misc\\",\\"n\\":13,\\"delay\\":0.1}",
-  "0/1 -> 40/11: {\\"s\\":\\"misc\\",\\"n\\":13,\\"delay\\":0.1}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 268 https://strudel.cc/?IV4pDyaLUMB0 1`] = `
-[
-  "0/1 -> 1/2: c1",
-  "1/2 -> 1/1: c1",
-  "1/2 -> 1/1: c3",
-  "0/1 -> 1/4: C1",
-  "1/4 -> 1/2: C3",
-  "1/2 -> 3/4: C1",
-  "3/4 -> 1/1: C3",
-]
-`;
-
-exports[`renders shared tunes > shared tune 269 https://strudel.cc/?XQ_uhshhjEYw 1`] = `
-[
-  "-18/5 -> 2/5: c3",
-  "-18/5 -> 2/5: e3",
-  "-18/5 -> 2/5: g3",
-  "2/5 -> 12/5: g3",
-  "2/5 -> 12/5: bb3",
-  "2/5 -> 12/5: d4",
-  "0/1 -> 4/1: Baker man",
-]
-`;
-
-exports[`renders shared tunes > shared tune 270 https://strudel.cc/?XDCsI7uPtnav 1`] = `
-[
-  "0/1 -> 2/1: {\\"note\\":\\"C3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.4722222222222222}",
-  "0/1 -> 2/1: {\\"note\\":\\"E3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.4907407407407407}",
-  "0/1 -> 1/1: {\\"note\\":\\"B3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5231481481481481}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 271 https://strudel.cc/?2t_PSStoDUhV 1`] = `
-[
-  "0/1 -> 5/11: {\\"note\\":\\"c2\\",\\"s\\":\\"sawtooth\\",\\"vowel\\":\\"a\\",\\"gain\\":0.2000348432426738,\\"delay\\":0.1}",
-  "5/11 -> 15/11: {\\"note\\":\\"eb2\\",\\"s\\":\\"sawtooth\\",\\"vowel\\":\\"a\\",\\"gain\\":0.20089674623394735,\\"delay\\":0.1}",
-  "10/11 -> 15/11: {\\"note\\":\\"c2\\",\\"s\\":\\"square\\",\\"vowel\\":\\"e\\",\\"gain\\":0.20395302623820533,\\"delay\\":0.1}",
-  "0/1 -> 5/11: {\\"note\\":\\"c1\\",\\"s\\":\\"sine\\",\\"shape\\":0.7,\\"gain\\":0.40012812116863894,\\"delay\\":0.1}",
-  "5/11 -> 10/11: {\\"note\\":\\"eb1\\",\\"s\\":\\"sine\\",\\"shape\\":0.7,\\"gain\\":0.40317197328808513,\\"delay\\":0.1}",
-  "10/11 -> 15/11: {\\"note\\":\\"c1\\",\\"s\\":\\"sine\\",\\"shape\\":0.7,\\"gain\\":0.4134168413561418,\\"delay\\":0.1}",
-  "0/1 -> 5/44: {\\"s\\":\\"hh\\",\\"pan\\":0.0011524725685347903,\\"gain\\":0.2,\\"delay\\":0.1}",
-  "5/44 -> 5/22: {\\"s\\":\\"hh\\",\\"pan\\":0.025337550391114405,\\"speed\\":0.9,\\"gain\\":0.2,\\"delay\\":0.1}",
-  "5/22 -> 15/44: {\\"s\\":\\"hh\\",\\"pan\\":0.09352072111390441,\\"speed\\":0.9,\\"gain\\":0.5,\\"delay\\":0.1}",
-  "15/44 -> 5/11: {\\"s\\":\\"hh\\",\\"pan\\":0.19951846897795633,\\"speed\\":0.9,\\"gain\\":0.5,\\"delay\\":0.1}",
-  "5/11 -> 15/22: {\\"s\\":\\"hh\\",\\"pan\\":0.3765602545513502,\\"speed\\":1.1,\\"gain\\":0.6,\\"delay\\":0.1}",
-  "15/22 -> 10/11: {\\"s\\":\\"hh\\",\\"pan\\":0.5112023464103004,\\"speed\\":1.1,\\"gain\\":0.4,\\"delay\\":0.1}",
-  "10/11 -> 45/44: {\\"s\\":\\"hh\\",\\"pan\\":0.5205181601692033,\\"speed\\":0.9,\\"gain\\":0.2,\\"delay\\":0.1}",
-  "0/1 -> 20/33: {\\"s\\":\\"bd:4\\",\\"delay\\":0.1}",
-  "20/33 -> 50/33: {\\"s\\":\\"bd:4\\",\\"delay\\":0.1}",
-  "20/33 -> 50/33: {\\"s\\":\\"bd:4\\",\\"delay\\":0.1}",
-  "0/1 -> 8/11: {\\"s\\":\\"bd:7\\",\\"delay\\":0.1}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 272 https://strudel.cc/?J4419vLymh08 1`] = `
-[
-  "5/6 -> 5/3: {\\"note\\":\\"eb4\\",\\"s\\":\\"piano\\",\\"cutoff\\":1275.348281040755,\\"resonance\\":0,\\"delay\\":0.1}",
-  "0/1 -> 5/6: {\\"value\\":\\"\\",\\"s\\":\\"sawtooth\\",\\"vowel\\":\\"a\\",\\"gain\\":1.8000302424954437,\\"hcutoff\\":800,\\"cutoff\\":770.1250948828399,\\"resonance\\":0,\\"delay\\":0.1}",
-  "5/6 -> 5/3: {\\"value\\":\\"\\",\\"s\\":\\"sawtooth\\",\\"vowel\\":\\"e\\",\\"gain\\":1.800740293925432,\\"hcutoff\\":800,\\"cutoff\\":1275.348281040755,\\"resonance\\":0,\\"delay\\":0.1}",
-  "0/1 -> 5/12: {\\"value\\":\\"\\",\\"s\\":\\"sine\\",\\"shape\\":0.31075614638684784,\\"gain\\":0.32689036596711957,\\"cutoff\\":550.2814374985721,\\"resonance\\":0,\\"delay\\":0.1}",
-  "5/6 -> 5/4: {\\"value\\":\\"\\",\\"s\\":\\"sine\\",\\"shape\\":0.41301749653939623,\\"gain\\":0.5825437413484906,\\"cutoff\\":1275.348281040755,\\"resonance\\":0,\\"delay\\":0.1}",
-  "0/1 -> 5/48: {\\"s\\":\\"hh:4\\",\\"pan\\":0.0011524725685347903,\\"gain\\":0.20023049451370697,\\"cutoff\\":501.01682565995276,\\"delay\\":0.1}",
-  "5/8 -> 35/48: {\\"s\\":\\"hh:4\\",\\"pan\\":0.4942046147094601,\\"gain\\":0.298840922941892,\\"cutoff\\":1127.589313362064,\\"delay\\":0.1}",
-  "5/48 -> 5/24: {\\"s\\":\\"hh:4\\",\\"pan\\":0.025337550391114405,\\"speed\\":0.8,\\"gain\\":0.20506751007822288,\\"cutoff\\":523.1963129666834,\\"delay\\":0.1}",
-  "5/24 -> 5/16: {\\"s\\":\\"hh:4\\",\\"pan\\":0.09352072111390441,\\"speed\\":0.8,\\"gain\\":0.2187041442227809,\\"cutoff\\":589.4695471856543,\\"delay\\":0.1}",
-  "5/16 -> 5/12: {\\"s\\":\\"hh:4\\",\\"pan\\":0.19951846897795633,\\"speed\\":0.8,\\"gain\\":0.2399036937955913,\\"cutoff\\":701.2472529547128,\\"delay\\":0.1}",
-  "5/12 -> 25/48: {\\"s\\":\\"hh:4\\",\\"pan\\":0.32002369612261816,\\"speed\\":0.8,\\"gain\\":0.26400473922452367,\\"cutoff\\":844.1125126334155,\\"delay\\":0.1}",
-  "25/48 -> 5/8: {\\"s\\":\\"hh:4\\",\\"pan\\":0.4260214439866701,\\"speed\\":0.8,\\"gain\\":0.28520428879733406,\\"cutoff\\":994.7023499022843,\\"delay\\":0.1}",
-  "35/48 -> 5/6: {\\"s\\":\\"hh:4\\",\\"pan\\":0.5183896925320397,\\"speed\\":0.8,\\"gain\\":0.30367793850640795,\\"cutoff\\":1222.1630601329798,\\"delay\\":0.1}",
-  "5/6 -> 15/16: {\\"s\\":\\"hh:4\\",\\"pan\\":0.5205181601692033,\\"speed\\":0.9,\\"gain\\":0.30410363203384067,\\"cutoff\\":1269.511939453993,\\"delay\\":0.1}",
-  "0/1 -> 2/3: {\\"s\\":\\"bd:7\\",\\"cutoff\\":663.5595704946253,\\"delay\\":0.1}",
-  "0/1 -> 2/3: {\\"s\\":\\"bd:7\\",\\"cutoff\\":663.5595704946253,\\"delay\\":0.1}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 273 https://strudel.cc/?hGG0rEr1zC3A 1`] = `
-[
-  "0/1 -> 5/4: {\\"value\\":\\"\\",\\"s\\":\\"sawtooth\\",\\"vowel\\":\\"a\\",\\"gain\\":1.8000302424954437,\\"hcutoff\\":800,\\"cutoff\\":889.6566238254309,\\"resonance\\":0,\\"delay\\":0.1}",
-  "0/1 -> 5/8: {\\"value\\":\\"\\",\\"s\\":\\"sine\\",\\"shape\\":0.31075614638684784,\\"gain\\":0.32689036596711957,\\"cutoff\\":640.2810816708566,\\"resonance\\":0,\\"delay\\":0.1}",
-  "0/1 -> 5/32: {\\"s\\":\\"hh:4\\",\\"pan\\":0.0011524725685347903,\\"gain\\":0.20023049451370697,\\"cutoff\\":503.29418853183773,\\"delay\\":0.1}",
-  "15/16 -> 35/32: {\\"s\\":\\"hh:4\\",\\"pan\\":0.4942046147094601,\\"gain\\":0.298840922941892,\\"cutoff\\":1279.0864289350343,\\"delay\\":0.1}",
-  "5/32 -> 5/16: {\\"s\\":\\"hh:4\\",\\"pan\\":0.025337550391114405,\\"speed\\":0.8,\\"gain\\":0.20506751007822288,\\"cutoff\\":568.3668865859811,\\"delay\\":0.1}",
-  "5/16 -> 15/32: {\\"s\\":\\"hh:4\\",\\"pan\\":0.09352072111390441,\\"speed\\":0.8,\\"gain\\":0.2187041442227809,\\"cutoff\\":734.8617615476446,\\"delay\\":0.1}",
-  "15/32 -> 5/8: {\\"s\\":\\"hh:4\\",\\"pan\\":0.19951846897795633,\\"speed\\":0.8,\\"gain\\":0.2399036937955913,\\"cutoff\\":957.7506764815016,\\"delay\\":0.1}",
-  "5/8 -> 25/32: {\\"s\\":\\"hh:4\\",\\"pan\\":0.32002369612261816,\\"speed\\":0.8,\\"gain\\":0.26400473922452367,\\"cutoff\\":1155.4255766324245,\\"delay\\":0.1}",
-  "25/32 -> 15/16: {\\"s\\":\\"hh:4\\",\\"pan\\":0.4260214439866701,\\"speed\\":0.8,\\"gain\\":0.28520428879733406,\\"cutoff\\":1261.9555148823424,\\"delay\\":0.1}",
-  "0/1 -> 1/1: {\\"s\\":\\"bd:7\\",\\"cutoff\\":889.6566238254309,\\"delay\\":0.1}",
-  "0/1 -> 1/1: {\\"s\\":\\"bd:7\\",\\"cutoff\\":889.6566238254309,\\"delay\\":0.1}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 274 https://strudel.cc/?ahkvgPdMeapI 1`] = `
-[
-  "0/1 -> 1/2: {\\"note\\":\\"F3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.49537037037037035}",
-  "1/4 -> 3/4: {\\"note\\":\\"F2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.4398148148148148}",
-  "1/2 -> 1/1: {\\"note\\":\\"F3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.49537037037037035}",
-  "1/2 -> 1/1: {\\"note\\":\\"Ab3\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5092592592592593}",
-  "1/2 -> 1/1: {\\"note\\":\\"C4\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.5277777777777778}",
-  "1/2 -> 1/1: {\\"note\\":\\"F2\\",\\"clip\\":1,\\"s\\":\\"piano\\",\\"release\\":0.1,\\"pan\\":0.4398148148148148}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 275 https://strudel.cc/?um_AAxJMJr5U 1`] = `
-[
-  "0/1 -> 1/1: {\\"note\\":\\"c4\\",\\"s\\":\\"piano\\",\\"gain\\":0.5}",
-  "0/1 -> 1/1: {\\"note\\":\\"e4\\",\\"s\\":\\"piano\\",\\"gain\\":0.5}",
-  "0/1 -> 1/1: {\\"note\\":\\"g4\\",\\"s\\":\\"piano\\",\\"gain\\":0.5}",
-  "0/1 -> 1/8: {\\"s\\":\\"hh:4\\",\\"pan\\":0.0011524725685347903,\\"gain\\":0.5,\\"cutoff\\":1010.3722531168131}",
-  "3/4 -> 7/8: {\\"s\\":\\"hh:4\\",\\"pan\\":0.4942046147094601,\\"gain\\":0.5,\\"cutoff\\":5447.84153238514}",
-  "1/8 -> 1/4: {\\"s\\":\\"hh:4\\",\\"pan\\":0.025337550391114405,\\"speed\\":0.8,\\"gain\\":0.5,\\"cutoff\\":1228.0379535200295}",
-  "1/4 -> 3/8: {\\"s\\":\\"hh:4\\",\\"pan\\":0.09352072111390441,\\"speed\\":0.8,\\"gain\\":0.5,\\"cutoff\\":1841.6864900251398}",
-  "3/8 -> 1/2: {\\"s\\":\\"hh:4\\",\\"pan\\":0.19951846897795633,\\"speed\\":0.8,\\"gain\\":0.5,\\"cutoff\\":2795.666220801607}",
-  "1/2 -> 5/8: {\\"s\\":\\"hh:4\\",\\"pan\\":0.32002369612261816,\\"speed\\":0.8,\\"gain\\":0.5,\\"cutoff\\":3880.2132651035636}",
-  "5/8 -> 3/4: {\\"s\\":\\"hh:4\\",\\"pan\\":0.4260214439866701,\\"speed\\":0.8,\\"gain\\":0.5,\\"cutoff\\":4834.19299588003}",
-  "7/8 -> 1/1: {\\"s\\":\\"hh:4\\",\\"pan\\":0.5183896925320397,\\"speed\\":0.8,\\"gain\\":0.5,\\"cutoff\\":5665.507232788357}",
-  "0/1 -> 4/5: {\\"s\\":\\"bd:7\\",\\"cutoff\\":300,\\"gain\\":0.5}",
-  "0/1 -> 4/5: {\\"s\\":\\"bd:7\\",\\"cutoff\\":1000,\\"gain\\":0.5}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 276 https://strudel.cc/?UxSJbzL1d05O 1`] = `
-[
-  "0/1 -> 5/4: {\\"note\\":\\"c4\\",\\"s\\":\\"piano\\",\\"gain\\":0.5}",
-  "0/1 -> 5/4: {\\"note\\":\\"eb4\\",\\"s\\":\\"piano\\",\\"gain\\":0.5}",
-  "0/1 -> 5/4: {\\"note\\":\\"g4\\",\\"s\\":\\"piano\\",\\"gain\\":0.5}",
-  "0/1 -> 5/4: {\\"note\\":\\"c4\\",\\"s\\":\\"square\\",\\"vowel\\":\\"a\\",\\"gain\\":0.5}",
-  "0/1 -> 5/4: {\\"note\\":\\"eb4\\",\\"s\\":\\"square\\",\\"vowel\\":\\"a\\",\\"gain\\":0.5}",
-  "0/1 -> 5/4: {\\"note\\":\\"g4\\",\\"s\\":\\"square\\",\\"vowel\\":\\"a\\",\\"gain\\":0.5}",
-  "0/1 -> 5/8: {\\"s\\":\\"hh:1\\",\\"pan\\":0.05378073193423916,\\"speed\\":0.9,\\"gain\\":0.5,\\"cutoff\\":1484.0265874081524}",
-  "5/8 -> 5/4: {\\"s\\":\\"hh:1\\",\\"pan\\":0.46576143316633534,\\"speed\\":0.9,\\"gain\\":0.5,\\"cutoff\\":5191.852898497018}",
-  "0/1 -> 5/32: {\\"s\\":\\"hh:4\\",\\"pan\\":0.8426077850162983,\\"gain\\":0.5,\\"cutoff\\":1010.3722531168131}",
-  "15/16 -> 35/32: {\\"s\\":\\"hh:4\\",\\"pan\\":0.7516226731240749,\\"gain\\":0.5,\\"cutoff\\":5447.84153238514}",
-  "5/32 -> 5/16: {\\"s\\":\\"hh:4\\",\\"pan\\":0.20066574029624462,\\"speed\\":0.8,\\"gain\\":0.5,\\"cutoff\\":1228.0379535200295}",
-  "5/8 -> 25/32: {\\"s\\":\\"hh:4\\",\\"pan\\":0.16399178467690945,\\"speed\\":0.8,\\"gain\\":0.5,\\"cutoff\\":3880.2132651035636}",
-  "25/32 -> 15/16: {\\"s\\":\\"hh:4\\",\\"pan\\":0.408811716362834,\\"speed\\":0.8,\\"gain\\":0.5,\\"cutoff\\":4834.19299588003}",
-  "0/1 -> 1/1: {\\"s\\":\\"bd:7\\",\\"cutoff\\":300,\\"gain\\":0.5}",
-  "0/1 -> 1/1: {\\"s\\":\\"bd:7\\",\\"cutoff\\":1000,\\"gain\\":0.5}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 277 https://strudel.cc/?90drkbxdBr2- 1`] = `
-[
-  "0/1 -> 5/4: {\\"note\\":\\"c4\\",\\"s\\":\\"piano\\",\\"gain\\":0.5}",
-  "0/1 -> 5/4: {\\"note\\":\\"eb4\\",\\"s\\":\\"piano\\",\\"gain\\":0.5}",
-  "0/1 -> 5/4: {\\"note\\":\\"g4\\",\\"s\\":\\"piano\\",\\"gain\\":0.5}",
-  "0/1 -> 5/4: {\\"note\\":\\"c4\\",\\"s\\":\\"square\\",\\"vowel\\":\\"a\\",\\"gain\\":0.5}",
-  "0/1 -> 5/4: {\\"note\\":\\"eb4\\",\\"s\\":\\"square\\",\\"vowel\\":\\"a\\",\\"gain\\":0.5}",
-  "0/1 -> 5/4: {\\"note\\":\\"g4\\",\\"s\\":\\"square\\",\\"vowel\\":\\"a\\",\\"gain\\":0.5}",
-  "0/1 -> 5/8: {\\"s\\":\\"hh:1\\",\\"pan\\":0.05378073193423916,\\"speed\\":0.9,\\"gain\\":0.5,\\"cutoff\\":1484.0265874081524}",
-  "5/8 -> 5/4: {\\"s\\":\\"hh:1\\",\\"pan\\":0.46576143316633534,\\"speed\\":0.9,\\"gain\\":0.5,\\"cutoff\\":5191.852898497018}",
-  "0/1 -> 5/32: {\\"s\\":\\"hh:4\\",\\"pan\\":0.8426077850162983,\\"gain\\":0.5,\\"cutoff\\":1010.3722531168131}",
-  "15/16 -> 35/32: {\\"s\\":\\"hh:4\\",\\"pan\\":0.7516226731240749,\\"gain\\":0.5,\\"cutoff\\":5447.84153238514}",
-  "5/32 -> 5/16: {\\"s\\":\\"hh:4\\",\\"pan\\":0.20066574029624462,\\"speed\\":0.8,\\"gain\\":0.5,\\"cutoff\\":1228.0379535200295}",
-  "5/16 -> 15/32: {\\"s\\":\\"hh:4\\",\\"pan\\":0.5675661638379097,\\"speed\\":0.8,\\"gain\\":0.5,\\"cutoff\\":1841.6864900251398}",
-  "15/32 -> 5/8: {\\"s\\":\\"hh:4\\",\\"pan\\":0.3015887886285782,\\"speed\\":0.8,\\"gain\\":0.5,\\"cutoff\\":2795.666220801607}",
-  "5/8 -> 25/32: {\\"s\\":\\"hh:4\\",\\"pan\\":0.16399178467690945,\\"speed\\":0.8,\\"gain\\":0.5,\\"cutoff\\":3880.2132651035636}",
-  "25/32 -> 15/16: {\\"s\\":\\"hh:4\\",\\"pan\\":0.408811716362834,\\"speed\\":0.8,\\"gain\\":0.5,\\"cutoff\\":4834.19299588003}",
-  "0/1 -> 1/1: {\\"s\\":\\"bd:7\\",\\"cutoff\\":300,\\"gain\\":0.5}",
-  "0/1 -> 1/1: {\\"s\\":\\"bd:7\\",\\"cutoff\\":1000,\\"gain\\":0.5}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 278 https://strudel.cc/?aGtqNXDNRxdA 1`] = `
-[
-  "0/1 -> 3/2: {\\"s\\":\\"bd\\",\\"speed\\":0.7519542165100574}",
-  "3/4 -> 3/2: {\\"s\\":\\"sd\\",\\"speed\\":0.7931522866332671}",
-  "3/8 -> 3/4: {\\"s\\":\\"hh\\",\\"speed\\":0.7285963821098448}",
-  "3/4 -> 9/8: {\\"s\\":\\"hh\\",\\"speed\\":0.77531205091027}",
-  "0/1 -> 3/2: {\\"n\\":33.129885541275144,\\"decay\\":0.15,\\"sustain\\":0,\\"s\\":\\"sawtooth\\",\\"gain\\":0.4,\\"cutoff\\":3669.6267869262615}",
-  "0/1 -> 3/2: {\\"n\\":33.17988554127514,\\"decay\\":0.15,\\"sustain\\":0,\\"s\\":\\"sawtooth\\",\\"gain\\":0.4,\\"cutoff\\":3669.6267869262615}",
-  "0/1 -> 3/2: {\\"n\\":55.129885541275144,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":59.129885541275144,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":60.129885541275144,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":64.12988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":55.16988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":59.16988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":60.16988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":64.16988554127515,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "3/16 -> 3/8: {\\"n\\":69.01266877519555,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/8 -> 9/16: {\\"n\\":69.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/8 -> 9/16: {\\"n\\":72.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/4 -> 15/16: {\\"n\\":72.16001184806132,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "15/16 -> 9/8: {\\"n\\":72.21301072199333,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/16 -> 3/8: {\\"n\\":69.05266877519557,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/8 -> 9/16: {\\"n\\":69.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/8 -> 9/16: {\\"n\\":72.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/4 -> 15/16: {\\"n\\":72.20001184806131,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "15/16 -> 9/8: {\\"n\\":72.25301072199335,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "0/1 -> 3/16: {\\"n\\":93.00057728554401,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "0/1 -> 3/16: {\\"n\\":93.04057728554402,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "3/8 -> 9/16: {\\"n\\":69.01266877519555,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "9/16 -> 3/4: {\\"n\\":69.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "9/16 -> 3/4: {\\"n\\":72.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "15/16 -> 9/8: {\\"n\\":72.16001184806132,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "3/8 -> 9/16: {\\"n\\":69.05266877519557,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "9/16 -> 3/4: {\\"n\\":69.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "9/16 -> 3/4: {\\"n\\":72.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "15/16 -> 9/8: {\\"n\\":72.20001184806131,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "3/16 -> 3/8: {\\"n\\":93.00057728554401,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "3/16 -> 3/8: {\\"n\\":93.04057728554402,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "9/16 -> 3/4: {\\"n\\":69.01266877519555,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "3/4 -> 15/16: {\\"n\\":69.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "3/4 -> 15/16: {\\"n\\":72.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "9/16 -> 3/4: {\\"n\\":69.05266877519557,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "3/4 -> 15/16: {\\"n\\":69.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "3/4 -> 15/16: {\\"n\\":72.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "0/1 -> 3/16: {\\"n\\":72.0468455057745,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "0/1 -> 3/16: {\\"n\\":93.0468455057745,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "3/8 -> 9/16: {\\"n\\":93.00057728554401,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "0/1 -> 3/16: {\\"n\\":72.0868455057745,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "0/1 -> 3/16: {\\"n\\":93.0868455057745,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "3/8 -> 9/16: {\\"n\\":93.04057728554402,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "3/4 -> 15/16: {\\"n\\":69.01266877519555,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "15/16 -> 9/8: {\\"n\\":69.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "3/4 -> 15/16: {\\"n\\":69.05266877519557,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "15/16 -> 9/8: {\\"n\\":69.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 279 https://strudel.cc/?N3UBBhj_uwxd 1`] = `
-[
-  "0/1 -> 1/10: C3",
-  "0/1 -> 1/10: E3",
-  "0/1 -> 1/10: G3",
-  "1/4 -> 7/20: B3",
-  "1/4 -> 7/20: E4",
-  "1/4 -> 7/20: E3",
-  "1/2 -> 3/5: C3",
-  "1/2 -> 3/5: A2",
-  "1/2 -> 3/5: C3",
-  "3/4 -> 17/20: E3",
-  "3/4 -> 17/20: G3",
-  "3/4 -> 17/20: B3",
-  "0/1 -> 1/5: C2",
-  "1/2 -> 7/10: E2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 280 https://strudel.cc/?wF7a24BViyqU 1`] = `
-[
-  "0/1 -> 3/4: F3",
-  "3/4 -> 9/8: Ab3",
-  "0/1 -> 3/4: Ab3",
-  "3/4 -> 9/8: C4",
-  "3/8 -> 15/32: Eb4",
-  "9/16 -> 21/32: Eb4",
-  "3/8 -> 15/32: G4",
-  "9/16 -> 21/32: G4",
-  "241/600 -> 147/200: F1",
-  "0/1 -> 3/4: c2",
-  "3/4 -> 3/2: c2",
-  "3/4 -> 3/2: c2",
-  "0/1 -> 3/8: c4",
-  "3/8 -> 3/4: c4",
-  "3/4 -> 9/8: c4",
-]
-`;
-
-exports[`renders shared tunes > shared tune 281 https://strudel.cc/?h87w26zgMJ0L 1`] = `
-[
-  "0/1 -> 5/6: {\\"note\\":\\"c4\\",\\"s\\":\\"piano\\",\\"gain\\":0.5}",
-  "0/1 -> 5/6: {\\"note\\":\\"eb4\\",\\"s\\":\\"piano\\",\\"gain\\":0.5}",
-  "0/1 -> 5/6: {\\"note\\":\\"g4\\",\\"s\\":\\"piano\\",\\"gain\\":0.5}",
-  "5/6 -> 5/3: {\\"note\\":\\"f4\\",\\"s\\":\\"piano\\",\\"gain\\":0.5}",
-  "5/6 -> 5/3: {\\"note\\":\\"ab4\\",\\"s\\":\\"piano\\",\\"gain\\":0.5}",
-  "5/6 -> 5/3: {\\"note\\":\\"d4\\",\\"s\\":\\"piano\\",\\"gain\\":0.5}",
-  "0/1 -> 5/6: {\\"value\\":\\"C5\\",\\"s\\":\\"square\\",\\"vowel\\":\\"a\\",\\"gain\\":0.5}",
-  "0/1 -> 5/6: {\\"value\\":\\"Eb5\\",\\"s\\":\\"square\\",\\"vowel\\":\\"a\\",\\"gain\\":0.5}",
-  "0/1 -> 5/6: {\\"value\\":\\"G5\\",\\"s\\":\\"square\\",\\"vowel\\":\\"a\\",\\"gain\\":0.5}",
-  "5/6 -> 5/3: {\\"value\\":\\"F5\\",\\"s\\":\\"square\\",\\"vowel\\":\\"e\\",\\"gain\\":0.5}",
-  "5/6 -> 5/3: {\\"value\\":\\"Ab5\\",\\"s\\":\\"square\\",\\"vowel\\":\\"e\\",\\"gain\\":0.5}",
-  "5/6 -> 5/3: {\\"value\\":\\"D5\\",\\"s\\":\\"square\\",\\"vowel\\":\\"e\\",\\"gain\\":0.5}",
-  "0/1 -> 5/12: {\\"s\\":\\"hh:1\\",\\"pan\\":0.05378073193423916,\\"speed\\":0.9,\\"gain\\":0.5,\\"cutoff\\":1484.0265874081524}",
-  "5/12 -> 5/6: {\\"s\\":\\"hh:1\\",\\"pan\\":0.46576143316633534,\\"speed\\":0.9,\\"gain\\":0.5,\\"cutoff\\":5191.852898497018}",
-  "5/6 -> 5/4: {\\"s\\":\\"hh:1\\",\\"pan\\":0.5650874826969812,\\"speed\\":1.1,\\"gain\\":0.5,\\"cutoff\\":6085.7873442728305}",
-  "0/1 -> 5/48: {\\"s\\":\\"hh:4\\",\\"pan\\":0.8426077850162983,\\"gain\\":0.5,\\"cutoff\\":1010.3722531168131}",
-  "5/8 -> 35/48: {\\"s\\":\\"hh:4\\",\\"pan\\":0.7516226731240749,\\"gain\\":0.5,\\"cutoff\\":5447.84153238514}",
-  "5/48 -> 5/24: {\\"s\\":\\"hh:4\\",\\"pan\\":0.20066574029624462,\\"speed\\":0.8,\\"gain\\":0.5,\\"cutoff\\":1228.0379535200295}",
-  "5/24 -> 5/16: {\\"s\\":\\"hh:4\\",\\"pan\\":0.5675661638379097,\\"speed\\":0.8,\\"gain\\":0.5,\\"cutoff\\":1841.6864900251398}",
-  "5/16 -> 5/12: {\\"s\\":\\"hh:4\\",\\"pan\\":0.3015887886285782,\\"speed\\":0.8,\\"gain\\":0.5,\\"cutoff\\":2795.666220801607}",
-  "5/12 -> 25/48: {\\"s\\":\\"hh:4\\",\\"pan\\":0.16399178467690945,\\"speed\\":0.8,\\"gain\\":0.5,\\"cutoff\\":3880.2132651035636}",
-  "25/48 -> 5/8: {\\"s\\":\\"hh:4\\",\\"pan\\":0.408811716362834,\\"speed\\":0.8,\\"gain\\":0.5,\\"cutoff\\":4834.19299588003}",
-  "35/48 -> 5/6: {\\"s\\":\\"hh:4\\",\\"pan\\":0.7029578909277916,\\"speed\\":0.8,\\"gain\\":0.5,\\"cutoff\\":5665.507232788357}",
-  "5/6 -> 15/16: {\\"s\\":\\"hh:4\\",\\"pan\\":0.5486328881233931,\\"speed\\":0.9,\\"gain\\":0.5,\\"cutoff\\":5684.663441522829}",
-  "15/16 -> 25/24: {\\"s\\":\\"hh:4\\",\\"pan\\":0.08174665085971355,\\"speed\\":0.9,\\"gain\\":0.5,\\"cutoff\\":5868.998111174235}",
-  "0/1 -> 2/3: {\\"s\\":\\"bd:7\\",\\"cutoff\\":300,\\"gain\\":0.5}",
-  "0/1 -> 2/3: {\\"s\\":\\"bd:7\\",\\"cutoff\\":1000,\\"gain\\":0.5}",
-  "0/1 -> 5/12: {\\"value\\":\\"c1\\",\\"s\\":\\"sine\\",\\"shape\\":0.31075614638684784,\\"gain\\":0.5}",
-  "5/6 -> 5/4: {\\"value\\":\\"c1\\",\\"s\\":\\"sine\\",\\"shape\\":0.41301749653939623,\\"gain\\":0.5}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 282 https://strudel.cc/?fwBxQjt9aVhx 1`] = `
-[
-  "5833/7200 -> 19/18: {\\"n\\":\\"C#4\\",\\"s\\":\\"Overdriven Guitar: Guitar\\",\\"gain\\":0.19}",
-  "437/800 -> 19/24: {\\"n\\":\\"D#4\\",\\"s\\":\\"Overdriven Guitar: Guitar\\",\\"gain\\":0.19}",
-  "2033/7200 -> 19/36: {\\"n\\":\\"F4\\",\\"s\\":\\"Overdriven Guitar: Guitar\\",\\"gain\\":0.19}",
-  "133/7200 -> 19/72: {\\"n\\":\\"G4\\",\\"s\\":\\"Overdriven Guitar: Guitar\\",\\"gain\\":0.19}",
-  "5833/7200 -> 19/18: {\\"n\\":\\"c#5\\",\\"s\\":\\"Overdriven Guitar: Guitar\\",\\"gain\\":0.09}",
-  "437/800 -> 19/24: {\\"n\\":\\"d#5\\",\\"s\\":\\"Overdriven Guitar: Guitar\\",\\"gain\\":0.09}",
-  "2033/7200 -> 19/36: {\\"n\\":\\"f5\\",\\"s\\":\\"Overdriven Guitar: Guitar\\",\\"gain\\":0.09}",
-  "133/7200 -> 19/72: {\\"n\\":\\"g5\\",\\"s\\":\\"Overdriven Guitar: Guitar\\",\\"gain\\":0.09}",
-  "19/24 -> 19/12: {\\"n\\":57,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.25}",
-  "19/24 -> 19/12: {\\"n\\":61,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.25}",
-  "19/24 -> 19/12: {\\"n\\":52,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.25}",
-  "0/1 -> 19/24: {\\"n\\":59,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.25}",
-  "0/1 -> 19/24: {\\"n\\":63,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.25}",
-  "0/1 -> 19/24: {\\"n\\":54,\\"s\\":\\"Choir Aahs: Ensemble\\",\\"gain\\":0.25}",
-  "209/240 -> 19/12: {\\"n\\":\\"A1\\",\\"s\\":\\"Electric Bass (finger): Bass\\",\\"gain\\":0.3}",
-  "19/240 -> 19/24: {\\"n\\":\\"B1\\",\\"s\\":\\"Electric Bass (finger): Bass\\",\\"gain\\":0.3}",
-  "19/24 -> 19/18: {\\"s\\":\\"sn\\",\\"gain\\":0.25}",
-  "19/36 -> 19/24: {\\"s\\":\\"sn\\",\\"gain\\":0.25}",
-  "19/72 -> 19/36: {\\"s\\":\\"sn\\",\\"gain\\":0.25}",
-  "0/1 -> 19/72: {\\"s\\":\\"sn\\",\\"gain\\":0.25}",
-  "19/24 -> 19/18: {\\"s\\":\\"hh\\",\\"gain\\":0.25}",
-  "19/36 -> 19/24: {\\"s\\":\\"hh\\",\\"gain\\":0.25}",
-  "19/72 -> 19/36: {\\"s\\":\\"hh\\",\\"gain\\":0.25}",
-  "0/1 -> 19/72: {\\"s\\":\\"hh\\",\\"gain\\":0.25}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 283 https://strudel.cc/?3rnmA7q0g2i- 1`] = `
-[
-  "0/1 -> 5/8: {\\"note\\":\\"G1\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":200,\\"resonance\\":20,\\"gain\\":0.15,\\"shape\\":0.6,\\"release\\":0.05}",
-  "0/1 -> 5/8: {\\"note\\":31.02,\\"s\\":\\"sawtooth\\",\\"cutoff\\":200,\\"resonance\\":20,\\"gain\\":0.15,\\"shape\\":0.6,\\"release\\":0.05}",
-  "5/8 -> 5/4: {\\"s\\":\\"hh\\",\\"room\\":0,\\"end\\":0.04483079938329212}",
-  "0/1 -> 5/16: {\\"s\\":\\"mt\\",\\"gain\\":0.5,\\"room\\":0.5}",
-  "15/16 -> 5/4: {\\"s\\":\\"lt\\",\\"gain\\":0.5,\\"room\\":0.5}",
-  "0/1 -> 5/1: {\\"s\\":\\"misc:2\\",\\"speed\\":1,\\"delay\\":0.5,\\"delaytime\\":0.3333333333333333,\\"gain\\":0.4}",
-  "5/8 -> 5/4: {\\"note\\":\\"Bb3\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.5,\\"cutoff\\":400.16785462816676,\\"decay\\":0.05380063255866716,\\"sustain\\":0,\\"delay\\":0.9,\\"room\\":1}",
-  "5/8 -> 5/4: {\\"note\\":\\"D4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.5,\\"cutoff\\":400.16785462816676,\\"decay\\":0.05380063255866716,\\"sustain\\":0,\\"delay\\":0.9,\\"room\\":1}",
-  "5/8 -> 5/4: {\\"note\\":\\"F4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.5,\\"cutoff\\":400.16785462816676,\\"decay\\":0.05380063255866716,\\"sustain\\":0,\\"delay\\":0.9,\\"room\\":1}",
-  "5/8 -> 5/4: {\\"note\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.5,\\"cutoff\\":400.16785462816676,\\"decay\\":0.05380063255866716,\\"sustain\\":0,\\"delay\\":0.9,\\"room\\":1}",
-  "5/8 -> 5/4: {\\"note\\":58.1,\\"s\\":\\"sawtooth\\",\\"gain\\":0.5,\\"cutoff\\":400.16785462816676,\\"decay\\":0.05380063255866716,\\"sustain\\":0,\\"delay\\":0.9,\\"room\\":1}",
-  "5/8 -> 5/4: {\\"note\\":62.1,\\"s\\":\\"sawtooth\\",\\"gain\\":0.5,\\"cutoff\\":400.16785462816676,\\"decay\\":0.05380063255866716,\\"sustain\\":0,\\"delay\\":0.9,\\"room\\":1}",
-  "5/8 -> 5/4: {\\"note\\":65.1,\\"s\\":\\"sawtooth\\",\\"gain\\":0.5,\\"cutoff\\":400.16785462816676,\\"decay\\":0.05380063255866716,\\"sustain\\":0,\\"delay\\":0.9,\\"room\\":1}",
-  "5/8 -> 5/4: {\\"note\\":69.1,\\"s\\":\\"sawtooth\\",\\"gain\\":0.5,\\"cutoff\\":400.16785462816676,\\"decay\\":0.05380063255866716,\\"sustain\\":0,\\"delay\\":0.9,\\"room\\":1}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 284 https://strudel.cc/?w1af5xWyhwNm 1`] = `
-[
-  "0/1 -> 8/1: {\\"s\\":\\"bass\\",\\"speed\\":0.125,\\"unit\\":\\"c\\",\\"clip\\":1}",
-  "0/1 -> 1/2: {\\"s\\":\\"bd\\"}",
-  "1/2 -> 1/1: {\\"s\\":\\"bd\\"}",
-  "1/2 -> 1/1: {\\"s\\":\\"sd\\"}",
-  "0/1 -> 1/4: {\\"s\\":\\"hh\\"}",
-  "1/4 -> 1/2: {\\"s\\":\\"hh\\"}",
-  "1/2 -> 3/4: {\\"s\\":\\"hh\\"}",
-  "3/4 -> 1/1: {\\"s\\":\\"hh\\"}",
-  "1/4 -> 1/2: {\\"note\\":\\"Gb3\\"}",
-  "1/4 -> 1/2: {\\"note\\":\\"Bb3\\"}",
-  "1/4 -> 1/2: {\\"note\\":\\"Cb4\\"}",
-  "1/4 -> 1/2: {\\"note\\":\\"Eb4\\"}",
-  "0/1 -> 1/4: {\\"note\\":\\"Ab4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":1239.2541394619345,\\"gain\\":0.8,\\"decay\\":0.05125097280354112,\\"sustain\\":0,\\"delay\\":0.2561353071307281,\\"room\\":1}",
-  "0/1 -> 1/4: {\\"note\\":68.1,\\"s\\":\\"sawtooth\\",\\"cutoff\\":1239.2541394619345,\\"gain\\":0.8,\\"decay\\":0.05125097280354112,\\"sustain\\":0,\\"delay\\":0.2561353071307281,\\"room\\":1}",
-  "1/4 -> 1/2: {\\"note\\":83,\\"s\\":\\"sawtooth\\",\\"cutoff\\":1317.3843795642892,\\"gain\\":0.8,\\"decay\\":0.07144728658238364,\\"sustain\\":0,\\"delay\\":0.26839114089991684,\\"room\\":1}",
-  "1/4 -> 1/2: {\\"note\\":83.1,\\"s\\":\\"sawtooth\\",\\"cutoff\\":1317.3843795642892,\\"gain\\":0.8,\\"decay\\":0.07144728658238364,\\"sustain\\":0,\\"delay\\":0.26839114089991684,\\"room\\":1}",
-  "0/1 -> 8/1: {\\"note\\":\\"b4\\",\\"s\\":\\"dino\\",\\"delay\\":0.8,\\"room\\":0.5}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 285 https://strudel.cc/?Ne_BJMKKDCO_ 1`] = `
-[
-  "0/1 -> 5/8: {\\"note\\":\\"G1\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":200,\\"resonance\\":20,\\"gain\\":0.15,\\"shape\\":0.6,\\"release\\":0.05}",
-  "0/1 -> 5/8: {\\"note\\":31.02,\\"s\\":\\"sawtooth\\",\\"cutoff\\":200,\\"resonance\\":20,\\"gain\\":0.15,\\"shape\\":0.6,\\"release\\":0.05}",
-  "5/8 -> 5/4: {\\"s\\":\\"hh\\",\\"room\\":0,\\"end\\":0.04483079938329212}",
-  "0/1 -> 5/16: {\\"s\\":\\"mt\\",\\"gain\\":0.5,\\"room\\":1}",
-  "15/16 -> 5/4: {\\"s\\":\\"lt\\",\\"gain\\":0.5,\\"room\\":1}",
-  "0/1 -> 5/1: {\\"s\\":\\"misc:2\\",\\"speed\\":1,\\"delay\\":0.5,\\"delaytime\\":0.3333333333333333,\\"gain\\":0.4}",
-  "5/8 -> 5/4: {\\"note\\":\\"Bb3\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.5,\\"cutoff\\":400.16785462816676,\\"decay\\":0.05380063255866716,\\"sustain\\":0,\\"delay\\":0.9,\\"room\\":1}",
-  "5/8 -> 5/4: {\\"note\\":\\"D4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.5,\\"cutoff\\":400.16785462816676,\\"decay\\":0.05380063255866716,\\"sustain\\":0,\\"delay\\":0.9,\\"room\\":1}",
-  "5/8 -> 5/4: {\\"note\\":\\"F4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.5,\\"cutoff\\":400.16785462816676,\\"decay\\":0.05380063255866716,\\"sustain\\":0,\\"delay\\":0.9,\\"room\\":1}",
-  "5/8 -> 5/4: {\\"note\\":\\"A4\\",\\"s\\":\\"sawtooth\\",\\"gain\\":0.5,\\"cutoff\\":400.16785462816676,\\"decay\\":0.05380063255866716,\\"sustain\\":0,\\"delay\\":0.9,\\"room\\":1}",
-  "5/8 -> 5/4: {\\"note\\":58.1,\\"s\\":\\"sawtooth\\",\\"gain\\":0.5,\\"cutoff\\":400.16785462816676,\\"decay\\":0.05380063255866716,\\"sustain\\":0,\\"delay\\":0.9,\\"room\\":1}",
-  "5/8 -> 5/4: {\\"note\\":62.1,\\"s\\":\\"sawtooth\\",\\"gain\\":0.5,\\"cutoff\\":400.16785462816676,\\"decay\\":0.05380063255866716,\\"sustain\\":0,\\"delay\\":0.9,\\"room\\":1}",
-  "5/8 -> 5/4: {\\"note\\":65.1,\\"s\\":\\"sawtooth\\",\\"gain\\":0.5,\\"cutoff\\":400.16785462816676,\\"decay\\":0.05380063255866716,\\"sustain\\":0,\\"delay\\":0.9,\\"room\\":1}",
-  "5/8 -> 5/4: {\\"note\\":69.1,\\"s\\":\\"sawtooth\\",\\"gain\\":0.5,\\"cutoff\\":400.16785462816676,\\"decay\\":0.05380063255866716,\\"sustain\\":0,\\"delay\\":0.9,\\"room\\":1}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 286 https://strudel.cc/?G2H5FM0Fc94a 1`] = `
-[
-  "0/1 -> 1/4: {\\"s\\":\\"woodblock:1\\"}",
-  "1/4 -> 3/8: {\\"s\\":\\"woodblock:2\\"}",
-  "0/1 -> 1/8: {\\"s\\":\\"brakedrum:1\\"}",
-  "3/4 -> 7/8: {\\"s\\":\\"brakedrum:1\\"}",
-  "3/8 -> 1/2: {\\"s\\":\\"woodblock:2\\",\\"speed\\":2}",
-  "1/2 -> 1/1: {\\"s\\":\\"snare_rim:0\\",\\"speed\\":2}",
-  "0/1 -> 8/1: {\\"s\\":\\"gong\\",\\"speed\\":2}",
-  "3/8 -> 1/2: {\\"s\\":\\"brakedrum:1\\",\\"speed\\":2}",
-  "3/4 -> 1/1: {\\"s\\":\\"cowbell:3\\",\\"speed\\":2}",
-  "-3/4 -> 1/4: {\\"note\\":\\"Bb3\\",\\"s\\":\\"clavisynth\\",\\"gain\\":0.2,\\"delay\\":0.25,\\"pan\\":0}",
-  "3/4 -> 7/4: {\\"note\\":\\"Bb3\\",\\"s\\":\\"clavisynth\\",\\"gain\\":0.2,\\"delay\\":0.25,\\"pan\\":1}",
-  "-1/4 -> 3/4: {\\"note\\":\\"F3\\",\\"s\\":\\"clavisynth\\",\\"gain\\":0.2,\\"delay\\":0.25,\\"pan\\":1}",
-  "0/1 -> 3/1: {\\"note\\":\\"D1\\",\\"s\\":\\"psaltery_pluck\\",\\"gain\\":0.6,\\"clip\\":1,\\"release\\":0.1,\\"room\\":0.5}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 287 https://strudel.cc/?EPFzAz99hwZW 1`] = `
-[
-  "0/1 -> 1/4: {\\"note\\":48,\\"s\\":\\"ocarina_vib\\",\\"clip\\":1,\\"release\\":0.1,\\"room\\":1,\\"gain\\":0.2}",
-  "1/4 -> 9/32: {\\"note\\":51,\\"s\\":\\"ocarina_vib\\",\\"clip\\":1,\\"release\\":0.1,\\"room\\":1,\\"gain\\":0.2}",
-  "11/32 -> 3/8: {\\"note\\":51,\\"s\\":\\"ocarina_vib\\",\\"clip\\":1,\\"release\\":0.1,\\"room\\":1,\\"gain\\":0.2}",
-  "7/16 -> 15/32: {\\"note\\":51,\\"s\\":\\"ocarina_vib\\",\\"clip\\":1,\\"release\\":0.1,\\"room\\":1,\\"gain\\":0.2}",
-  "1/2 -> 1/1: {\\"note\\":60,\\"s\\":\\"ocarina_vib\\",\\"clip\\":1,\\"release\\":0.1,\\"room\\":1,\\"gain\\":0.2}",
-  "3/4 -> 7/8: {\\"note\\":55,\\"s\\":\\"ocarina_vib\\",\\"clip\\":1,\\"release\\":0.1,\\"room\\":1,\\"gain\\":0.2}",
-  "7/8 -> 1/1: {\\"note\\":55,\\"s\\":\\"ocarina_vib\\",\\"clip\\":1,\\"release\\":0.1,\\"room\\":1,\\"gain\\":0.2}",
-  "0/1 -> 1/2: {\\"note\\":60,\\"s\\":\\"ocarina_vib\\",\\"clip\\":1,\\"release\\":0.1,\\"room\\":1,\\"gain\\":0.2}",
-  "1/2 -> 9/16: {\\"note\\":63,\\"s\\":\\"ocarina_vib\\",\\"clip\\":1,\\"release\\":0.1,\\"room\\":1,\\"gain\\":0.2}",
-  "11/16 -> 3/4: {\\"note\\":63,\\"s\\":\\"ocarina_vib\\",\\"clip\\":1,\\"release\\":0.1,\\"room\\":1,\\"gain\\":0.2}",
-  "7/8 -> 15/16: {\\"note\\":63,\\"s\\":\\"ocarina_vib\\",\\"clip\\":1,\\"release\\":0.1,\\"room\\":1,\\"gain\\":0.2}",
-  "0/1 -> 1/1: {\\"note\\":43,\\"s\\":\\"ocarina_vib\\",\\"clip\\":1,\\"release\\":0.1,\\"room\\":1,\\"gain\\":0.2}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 288 https://strudel.cc/?DSvgYUzEgx6n 1`] = `
-[
-  "0/1 -> 1/2: {\\"s\\":\\"bd\\",\\"bank\\":\\"RolandTR909\\"}",
-  "1/2 -> 1/1: {\\"s\\":\\"bd\\",\\"bank\\":\\"RolandTR909\\"}",
-  "1/2 -> 1/1: {\\"s\\":\\"cp\\",\\"bank\\":\\"RolandTR909\\"}",
-  "1/2 -> 1/1: {\\"s\\":\\"sd\\",\\"bank\\":\\"RolandTR909\\"}",
-  "0/1 -> 1/4: {\\"s\\":\\"hh:1\\",\\"end\\":0.02000058072071123,\\"bank\\":\\"RolandTR909\\",\\"room\\":0.5,\\"gain\\":0.4}",
-  "0/1 -> 1/4: {\\"s\\":\\"hh:1\\",\\"end\\":0.02000058072071123,\\"bank\\":\\"RolandTR909\\",\\"room\\":0.5,\\"gain\\":0.4}",
-  "1/4 -> 3/8: {\\"s\\":\\"hh:1\\",\\"end\\":0.02000875429921906,\\"bank\\":\\"RolandTR909\\",\\"room\\":0.5,\\"gain\\":0.4}",
-  "1/4 -> 3/8: {\\"s\\":\\"hh:1\\",\\"end\\":0.02000875429921906,\\"bank\\":\\"RolandTR909\\",\\"room\\":0.5,\\"gain\\":0.4}",
-  "3/8 -> 1/2: {\\"s\\":\\"hh:1\\",\\"end\\":0.020023446730265706,\\"bank\\":\\"RolandTR909\\",\\"room\\":0.5,\\"gain\\":0.4}",
-  "5/8 -> 3/4: {\\"s\\":\\"hh:1\\",\\"end\\":0.020086608138500644,\\"bank\\":\\"RolandTR909\\",\\"room\\":0.5,\\"gain\\":0.4}",
-  "5/8 -> 3/4: {\\"s\\":\\"hh:1\\",\\"end\\":0.020086608138500644,\\"bank\\":\\"RolandTR909\\",\\"room\\":0.5,\\"gain\\":0.4}",
-  "3/4 -> 7/8: {\\"s\\":\\"hh:1\\",\\"end\\":0.02013941880355398,\\"bank\\":\\"RolandTR909\\",\\"room\\":0.5,\\"gain\\":0.4}",
-  "1/8 -> 1/4: {\\"s\\":\\"hh:1\\",\\"speed\\":0.5,\\"delay\\":0.5,\\"end\\":0.020001936784171157,\\"bank\\":\\"RolandTR909\\",\\"room\\":0.5,\\"gain\\":0.4}",
-  "1/8 -> 1/4: {\\"s\\":\\"hh:1\\",\\"speed\\":0.5,\\"delay\\":0.5,\\"end\\":0.020001936784171157,\\"bank\\":\\"RolandTR909\\",\\"room\\":0.5,\\"gain\\":0.4}",
-  "1/8 -> 1/4: {\\"note\\":\\"G1\\",\\"s\\":\\"sawtooth\\",\\"decay\\":0.1,\\"sustain\\":0}",
-  "1/4 -> 3/8: {\\"note\\":\\"G1\\",\\"s\\":\\"sawtooth\\",\\"decay\\":0.1,\\"sustain\\":0}",
-  "1/2 -> 5/8: {\\"note\\":\\"G1\\",\\"s\\":\\"sawtooth\\",\\"decay\\":0.1,\\"sustain\\":0}",
-  "5/8 -> 3/4: {\\"note\\":\\"G1\\",\\"s\\":\\"sawtooth\\",\\"decay\\":0.1,\\"sustain\\":0}",
-  "7/8 -> 1/1: {\\"note\\":\\"G1\\",\\"s\\":\\"sawtooth\\",\\"decay\\":0.1,\\"sustain\\":0}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 289 https://strudel.cc/?cRvfurHbl4jo 1`] = `
-[
-  "0/1 -> 1/2: {\\"s\\":\\"bd\\",\\"delay\\":0,\\"delaytime\\":0.33,\\"delayfeedback\\":0.8,\\"speed\\":-1}",
-  "1/2 -> 1/1: {\\"s\\":\\"sd\\",\\"delay\\":0,\\"delaytime\\":0.33,\\"delayfeedback\\":0.8,\\"speed\\":-1}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 290 https://strudel.cc/?DGHGUqRXr5pe 1`] = `
-[
-  "0/1 -> 1/4: {\\"s\\":\\"jvbass:7\\",\\"cutoff\\":1000,\\"gain\\":0.6740862280130386,\\"room\\":1}",
-  "1/4 -> 1/2: {\\"s\\":\\"jvbass:2\\",\\"cutoff\\":1000,\\"gain\\":0.5605570062994958,\\"room\\":1}",
-  "0/1 -> 1/4: {\\"s\\":\\"bd\\",\\"cutoff\\":1000,\\"gain\\":0.6740862280130386,\\"room\\":1}",
-  "1/4 -> 1/2: {\\"s\\":\\"hh\\",\\"cutoff\\":1000,\\"gain\\":0.5605570062994958,\\"room\\":1}",
-  "0/1 -> 1/2: {\\"s\\":\\"psr\\",\\"cutoff\\":1000,\\"gain\\":0.5479038767516613,\\"room\\":1}",
-  "3/4 -> 1/1: {\\"s\\":\\"jvbass:3\\",\\"cutoff\\":1000,\\"gain\\":0.5590524323284627,\\"room\\":1}",
-  "3/4 -> 1/1: {\\"s\\":\\"hh\\",\\"cutoff\\":1000,\\"gain\\":0.5590524323284627,\\"room\\":1}",
-  "-1/8 -> 1/8: {\\"s\\":\\"jvbass:3\\",\\"delay\\":0.5,\\"cutoff\\":1000,\\"gain\\":0.7370431140065193,\\"room\\":1}",
-  "-1/8 -> 1/8: {\\"s\\":\\"hh\\",\\"delay\\":0.5,\\"cutoff\\":1000,\\"gain\\":0.7370431140065193,\\"room\\":1}",
-  "-3/8 -> 1/8: {\\"s\\":\\"psr\\",\\"delay\\":0.5,\\"cutoff\\":1000,\\"gain\\":0.7370431140065193,\\"room\\":1}",
-  "1/8 -> 3/8: {\\"s\\":\\"jvbass:7\\",\\"delay\\":0.5,\\"cutoff\\":1000,\\"gain\\":0.5479038767516613,\\"room\\":1}",
-  "3/8 -> 5/8: {\\"s\\":\\"jvbass:2\\",\\"delay\\":0.5,\\"cutoff\\":1000,\\"gain\\":0.5041922464966775,\\"room\\":1}",
-  "1/8 -> 3/8: {\\"s\\":\\"bd\\",\\"delay\\":0.5,\\"cutoff\\":1000,\\"gain\\":0.5479038767516613,\\"room\\":1}",
-  "3/8 -> 5/8: {\\"s\\":\\"hh\\",\\"delay\\":0.5,\\"cutoff\\":1000,\\"gain\\":0.5041922464966775,\\"room\\":1}",
-  "1/8 -> 5/8: {\\"s\\":\\"psr\\",\\"delay\\":0.5,\\"cutoff\\":1000,\\"gain\\":0.5605570062994958,\\"room\\":1}",
-  "7/8 -> 9/8: {\\"s\\":\\"jvbass:3\\",\\"delay\\":0.5,\\"cutoff\\":1000,\\"gain\\":0.6811831563711166,\\"room\\":1}",
-  "7/8 -> 9/8: {\\"s\\":\\"hh\\",\\"delay\\":0.5,\\"cutoff\\":1000,\\"gain\\":0.6811831563711166,\\"room\\":1}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 291 https://strudel.cc/?RBaWr8-15Guk 1`] = `
-[
-  "0/1 -> 1/6: {\\"s\\":\\"hh\\",\\"gain\\":0.6339596770703793,\\"room\\":0.6,\\"pan\\":0}",
-  "8/9 -> 17/18: {\\"s\\":\\"jvbass:7\\",\\"cutoff\\":1000,\\"gain\\":0.7514234818518162,\\"room\\":0.6,\\"pan\\":0}",
-  "2/3 -> 13/18: {\\"s\\":\\"jvbass:7\\",\\"cutoff\\":1000,\\"gain\\":0.7182912312448025,\\"room\\":0.6,\\"pan\\":0}",
-  "0/1 -> 1/1: {\\"s\\":\\"bd\\",\\"cutoff\\":1000,\\"gain\\":0.5041922464966775,\\"room\\":0.6,\\"pan\\":0}",
-  "-1/1 -> 1/1: {\\"s\\":\\"psr\\",\\"cutoff\\":1000,\\"gain\\":0.5041922464966775,\\"room\\":0.6,\\"pan\\":0}",
-  "5/6 -> 1/1: {\\"s\\":\\"hh\\",\\"gain\\":0.6339596770703793,\\"room\\":0.6,\\"pan\\":1}",
-  "1/18 -> 1/9: {\\"s\\":\\"jvbass:7\\",\\"cutoff\\":1000,\\"gain\\":0.7514234818518162,\\"room\\":0.6,\\"pan\\":1}",
-  "5/18 -> 1/3: {\\"s\\":\\"jvbass:7\\",\\"cutoff\\":1000,\\"gain\\":0.7182912312448025,\\"room\\":0.6,\\"pan\\":1}",
-  "0/1 -> 1/1: {\\"s\\":\\"bd\\",\\"cutoff\\":1000,\\"gain\\":0.5041922464966775,\\"room\\":0.6,\\"pan\\":1}",
-  "0/1 -> 2/1: {\\"s\\":\\"psr\\",\\"cutoff\\":1000,\\"gain\\":0.5041922464966775,\\"room\\":0.6,\\"pan\\":1}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 292 https://strudel.cc/?c41h3Z1fwqTB 1`] = `
-[
-  "0/1 -> 1/6: {\\"s\\":\\"hh\\",\\"gain\\":0.6339596770703793,\\"room\\":0.6,\\"pan\\":0}",
-  "8/9 -> 17/18: {\\"s\\":\\"jvbass:7\\",\\"cutoff\\":1000,\\"gain\\":0.7514234818518162,\\"room\\":0.6,\\"pan\\":0}",
-  "2/3 -> 13/18: {\\"s\\":\\"jvbass:7\\",\\"cutoff\\":1000,\\"gain\\":0.7182912312448025,\\"room\\":0.6,\\"pan\\":0}",
-  "0/1 -> 1/1: {\\"s\\":\\"bd\\",\\"cutoff\\":1000,\\"gain\\":0.5041922464966775,\\"room\\":0.6,\\"pan\\":0}",
-  "-1/1 -> 1/1: {\\"s\\":\\"psr\\",\\"cutoff\\":1000,\\"gain\\":0.5041922464966775,\\"room\\":0.6,\\"pan\\":0}",
-  "5/6 -> 1/1: {\\"s\\":\\"hh\\",\\"gain\\":0.6339596770703793,\\"room\\":0.6,\\"pan\\":1}",
-  "1/18 -> 1/9: {\\"s\\":\\"jvbass:7\\",\\"cutoff\\":1000,\\"gain\\":0.7514234818518162,\\"room\\":0.6,\\"pan\\":1}",
-  "5/18 -> 1/3: {\\"s\\":\\"jvbass:7\\",\\"cutoff\\":1000,\\"gain\\":0.7182912312448025,\\"room\\":0.6,\\"pan\\":1}",
-  "0/1 -> 1/1: {\\"s\\":\\"bd\\",\\"cutoff\\":1000,\\"gain\\":0.5041922464966775,\\"room\\":0.6,\\"pan\\":1}",
-  "0/1 -> 2/1: {\\"s\\":\\"psr\\",\\"cutoff\\":1000,\\"gain\\":0.5041922464966775,\\"room\\":0.6,\\"pan\\":1}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 293 https://strudel.cc/?lvF3fzHrDbyx 1`] = `
-[
-  "0/1 -> 1/2: {\\"s\\":\\"bev\\",\\"begin\\":0,\\"end\\":0.015625,\\"pan\\":0,\\"speed\\":0.5,\\"room\\":0.9}",
-  "0/1 -> 1/2: {\\"s\\":\\"bev\\",\\"begin\\":0.046875,\\"end\\":0.0625,\\"pan\\":1,\\"speed\\":0.5,\\"room\\":0.9}",
-  "1/4 -> 1/2: {\\"s\\":\\"bev\\",\\"begin\\":0.015625,\\"end\\":0.03125,\\"pan\\":0,\\"room\\":0.9}",
-  "1/2 -> 3/4: {\\"s\\":\\"bev\\",\\"begin\\":0.03125,\\"end\\":0.046875,\\"pan\\":0,\\"room\\":0.9}",
-  "3/4 -> 1/1: {\\"s\\":\\"bev\\",\\"begin\\":0.046875,\\"end\\":0.0625,\\"pan\\":0,\\"room\\":0.9}",
-  "3/4 -> 1/1: {\\"s\\":\\"bev\\",\\"begin\\":0,\\"end\\":0.015625,\\"pan\\":1,\\"room\\":0.9}",
-  "1/2 -> 3/4: {\\"s\\":\\"bev\\",\\"begin\\":0.015625,\\"end\\":0.03125,\\"pan\\":1,\\"room\\":0.9}",
-  "1/4 -> 1/2: {\\"s\\":\\"bev\\",\\"begin\\":0.03125,\\"end\\":0.046875,\\"pan\\":1,\\"room\\":0.9}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 294 https://strudel.cc/?vqqfVtY-n1Z6 1`] = `
-[
-  "0/1 -> 1/6: {\\"s\\":\\"hh\\",\\"gain\\":0.6339596770703793,\\"room\\":0.6,\\"pan\\":0}",
-  "8/9 -> 17/18: {\\"s\\":\\"jvbass:7\\",\\"cutoff\\":1000,\\"gain\\":0.7514234818518162,\\"room\\":0.6,\\"pan\\":0}",
-  "2/3 -> 13/18: {\\"s\\":\\"jvbass:7\\",\\"cutoff\\":1000,\\"gain\\":0.7182912312448025,\\"room\\":0.6,\\"pan\\":0}",
-  "0/1 -> 1/1: {\\"s\\":\\"bd\\",\\"cutoff\\":1000,\\"gain\\":0.5041922464966775,\\"room\\":0.6,\\"pan\\":0}",
-  "-1/1 -> 1/1: {\\"s\\":\\"bottle\\",\\"cutoff\\":1000,\\"gain\\":0.5041922464966775,\\"room\\":0.6,\\"pan\\":0}",
-  "5/6 -> 1/1: {\\"s\\":\\"hh\\",\\"gain\\":0.6339596770703793,\\"room\\":0.6,\\"pan\\":1}",
-  "1/18 -> 1/9: {\\"s\\":\\"jvbass:7\\",\\"cutoff\\":1000,\\"gain\\":0.7514234818518162,\\"room\\":0.6,\\"pan\\":1}",
-  "5/18 -> 1/3: {\\"s\\":\\"jvbass:7\\",\\"cutoff\\":1000,\\"gain\\":0.7182912312448025,\\"room\\":0.6,\\"pan\\":1}",
-  "0/1 -> 1/1: {\\"s\\":\\"bd\\",\\"cutoff\\":1000,\\"gain\\":0.5041922464966775,\\"room\\":0.6,\\"pan\\":1}",
-  "0/1 -> 2/1: {\\"s\\":\\"bottle\\",\\"cutoff\\":1000,\\"gain\\":0.5041922464966775,\\"room\\":0.6,\\"pan\\":1}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 295 https://strudel.cc/?C7PwKmsYAOJL 1`] = `
-[
-  "0/1 -> 1/64: {\\"s\\":\\"future:2\\",\\"begin\\":0,\\"end\\":0.0625,\\"speed\\":2,\\"pan\\":0,\\"room\\":0.6}",
-  "1/64 -> 1/32: {\\"s\\":\\"future:2\\",\\"begin\\":0.0625,\\"end\\":0.125,\\"speed\\":2,\\"pan\\":0,\\"room\\":0.6}",
-  "1/32 -> 3/64: {\\"s\\":\\"future:2\\",\\"begin\\":0.125,\\"end\\":0.1875,\\"speed\\":2,\\"pan\\":0,\\"room\\":0.6}",
-  "3/64 -> 1/16: {\\"s\\":\\"future:2\\",\\"begin\\":0.1875,\\"end\\":0.25,\\"speed\\":2,\\"pan\\":0,\\"room\\":0.6}",
-  "1/16 -> 5/64: {\\"s\\":\\"future:2\\",\\"begin\\":0.25,\\"end\\":0.3125,\\"speed\\":2,\\"pan\\":0,\\"room\\":0.6}",
-  "5/64 -> 3/32: {\\"s\\":\\"future:2\\",\\"begin\\":0.3125,\\"end\\":0.375,\\"speed\\":2,\\"pan\\":0,\\"room\\":0.6}",
-  "3/32 -> 7/64: {\\"s\\":\\"future:2\\",\\"begin\\":0.375,\\"end\\":0.4375,\\"speed\\":2,\\"pan\\":0,\\"room\\":0.6}",
-  "7/64 -> 1/8: {\\"s\\":\\"future:2\\",\\"begin\\":0.4375,\\"end\\":0.5,\\"speed\\":2,\\"pan\\":0,\\"room\\":0.6}",
-  "1/8 -> 9/64: {\\"s\\":\\"future:2\\",\\"begin\\":0.5,\\"end\\":0.5625,\\"speed\\":2,\\"pan\\":0,\\"room\\":0.6}",
-  "9/64 -> 5/32: {\\"s\\":\\"future:2\\",\\"begin\\":0.5625,\\"end\\":0.625,\\"speed\\":2,\\"pan\\":0,\\"room\\":0.6}",
-  "5/32 -> 11/64: {\\"s\\":\\"future:2\\",\\"begin\\":0.625,\\"end\\":0.6875,\\"speed\\":2,\\"pan\\":0,\\"room\\":0.6}",
-  "11/64 -> 3/16: {\\"s\\":\\"future:2\\",\\"begin\\":0.6875,\\"end\\":0.75,\\"speed\\":2,\\"pan\\":0,\\"room\\":0.6}",
-  "3/16 -> 13/64: {\\"s\\":\\"future:2\\",\\"begin\\":0.75,\\"end\\":0.8125,\\"speed\\":2,\\"pan\\":0,\\"room\\":0.6}",
-  "13/64 -> 7/32: {\\"s\\":\\"future:2\\",\\"begin\\":0.8125,\\"end\\":0.875,\\"speed\\":2,\\"pan\\":0,\\"room\\":0.6}",
-  "7/32 -> 15/64: {\\"s\\":\\"future:2\\",\\"begin\\":0.875,\\"end\\":0.9375,\\"speed\\":2,\\"pan\\":0,\\"room\\":0.6}",
-  "15/64 -> 1/4: {\\"s\\":\\"future:2\\",\\"begin\\":0.9375,\\"end\\":1,\\"speed\\":2,\\"pan\\":0,\\"room\\":0.6}",
-  "1/4 -> 17/64: {\\"s\\":\\"future:3\\",\\"begin\\":0,\\"end\\":0.0625,\\"speed\\":2,\\"pan\\":0,\\"room\\":0.6}",
-  "17/64 -> 9/32: {\\"s\\":\\"future:3\\",\\"begin\\":0.0625,\\"end\\":0.125,\\"speed\\":2,\\"pan\\":0,\\"room\\":0.6}",
-  "9/32 -> 19/64: {\\"s\\":\\"future:3\\",\\"begin\\":0.125,\\"end\\":0.1875,\\"speed\\":2,\\"pan\\":0,\\"room\\":0.6}",
-  "19/64 -> 5/16: {\\"s\\":\\"future:3\\",\\"begin\\":0.1875,\\"end\\":0.25,\\"speed\\":2,\\"pan\\":0,\\"room\\":0.6}",
-  "5/16 -> 21/64: {\\"s\\":\\"future:3\\",\\"begin\\":0.25,\\"end\\":0.3125,\\"speed\\":2,\\"pan\\":0,\\"room\\":0.6}",
-  "21/64 -> 11/32: {\\"s\\":\\"future:3\\",\\"begin\\":0.3125,\\"end\\":0.375,\\"speed\\":2,\\"pan\\":0,\\"room\\":0.6}",
-  "11/32 -> 23/64: {\\"s\\":\\"future:3\\",\\"begin\\":0.375,\\"end\\":0.4375,\\"speed\\":2,\\"pan\\":0,\\"room\\":0.6}",
-  "23/64 -> 3/8: {\\"s\\":\\"future:3\\",\\"begin\\":0.4375,\\"end\\":0.5,\\"speed\\":2,\\"pan\\":0,\\"room\\":0.6}",
-  "3/8 -> 25/64: {\\"s\\":\\"future:3\\",\\"begin\\":0.5,\\"end\\":0.5625,\\"speed\\":2,\\"pan\\":0,\\"room\\":0.6}",
-  "25/64 -> 13/32: {\\"s\\":\\"future:3\\",\\"begin\\":0.5625,\\"end\\":0.625,\\"speed\\":2,\\"pan\\":0,\\"room\\":0.6}",
-  "13/32 -> 27/64: {\\"s\\":\\"future:3\\",\\"begin\\":0.625,\\"end\\":0.6875,\\"speed\\":2,\\"pan\\":0,\\"room\\":0.6}",
-  "27/64 -> 7/16: {\\"s\\":\\"future:3\\",\\"begin\\":0.6875,\\"end\\":0.75,\\"speed\\":2,\\"pan\\":0,\\"room\\":0.6}",
-  "7/16 -> 29/64: {\\"s\\":\\"future:3\\",\\"begin\\":0.75,\\"end\\":0.8125,\\"speed\\":2,\\"pan\\":0,\\"room\\":0.6}",
-  "29/64 -> 15/32: {\\"s\\":\\"future:3\\",\\"begin\\":0.8125,\\"end\\":0.875,\\"speed\\":2,\\"pan\\":0,\\"room\\":0.6}",
-  "15/32 -> 31/64: {\\"s\\":\\"future:3\\",\\"begin\\":0.875,\\"end\\":0.9375,\\"speed\\":2,\\"pan\\":0,\\"room\\":0.6}",
-  "31/64 -> 1/2: {\\"s\\":\\"future:3\\",\\"begin\\":0.9375,\\"end\\":1,\\"speed\\":2,\\"pan\\":0,\\"room\\":0.6}",
-  "1/2 -> 17/32: {\\"s\\":\\"sd\\",\\"begin\\":0,\\"end\\":0.0625,\\"pan\\":0,\\"room\\":0.6}",
-  "17/32 -> 9/16: {\\"s\\":\\"sd\\",\\"begin\\":0.0625,\\"end\\":0.125,\\"pan\\":0,\\"room\\":0.6}",
-  "9/16 -> 19/32: {\\"s\\":\\"sd\\",\\"begin\\":0.125,\\"end\\":0.1875,\\"pan\\":0,\\"room\\":0.6}",
-  "19/32 -> 5/8: {\\"s\\":\\"sd\\",\\"begin\\":0.1875,\\"end\\":0.25,\\"pan\\":0,\\"room\\":0.6}",
-  "5/8 -> 21/32: {\\"s\\":\\"sd\\",\\"begin\\":0.25,\\"end\\":0.3125,\\"pan\\":0,\\"room\\":0.6}",
-  "21/32 -> 11/16: {\\"s\\":\\"sd\\",\\"begin\\":0.3125,\\"end\\":0.375,\\"pan\\":0,\\"room\\":0.6}",
-  "11/16 -> 23/32: {\\"s\\":\\"sd\\",\\"begin\\":0.375,\\"end\\":0.4375,\\"pan\\":0,\\"room\\":0.6}",
-  "23/32 -> 3/4: {\\"s\\":\\"sd\\",\\"begin\\":0.4375,\\"end\\":0.5,\\"pan\\":0,\\"room\\":0.6}",
-  "3/4 -> 25/32: {\\"s\\":\\"sd\\",\\"begin\\":0.5,\\"end\\":0.5625,\\"pan\\":0,\\"room\\":0.6}",
-  "25/32 -> 13/16: {\\"s\\":\\"sd\\",\\"begin\\":0.5625,\\"end\\":0.625,\\"pan\\":0,\\"room\\":0.6}",
-  "13/16 -> 27/32: {\\"s\\":\\"sd\\",\\"begin\\":0.625,\\"end\\":0.6875,\\"pan\\":0,\\"room\\":0.6}",
-  "27/32 -> 7/8: {\\"s\\":\\"sd\\",\\"begin\\":0.6875,\\"end\\":0.75,\\"pan\\":0,\\"room\\":0.6}",
-  "7/8 -> 29/32: {\\"s\\":\\"sd\\",\\"begin\\":0.75,\\"end\\":0.8125,\\"pan\\":0,\\"room\\":0.6}",
-  "29/32 -> 15/16: {\\"s\\":\\"sd\\",\\"begin\\":0.8125,\\"end\\":0.875,\\"pan\\":0,\\"room\\":0.6}",
-  "15/16 -> 31/32: {\\"s\\":\\"sd\\",\\"begin\\":0.875,\\"end\\":0.9375,\\"pan\\":0,\\"room\\":0.6}",
-  "31/32 -> 1/1: {\\"s\\":\\"sd\\",\\"begin\\":0.9375,\\"end\\":1,\\"pan\\":0,\\"room\\":0.6}",
-  "63/64 -> 1/1: {\\"s\\":\\"future:2\\",\\"begin\\":0,\\"end\\":0.0625,\\"speed\\":2,\\"pan\\":1,\\"room\\":0.6}",
-  "31/32 -> 63/64: {\\"s\\":\\"future:2\\",\\"begin\\":0.0625,\\"end\\":0.125,\\"speed\\":2,\\"pan\\":1,\\"room\\":0.6}",
-  "61/64 -> 31/32: {\\"s\\":\\"future:2\\",\\"begin\\":0.125,\\"end\\":0.1875,\\"speed\\":2,\\"pan\\":1,\\"room\\":0.6}",
-  "15/16 -> 61/64: {\\"s\\":\\"future:2\\",\\"begin\\":0.1875,\\"end\\":0.25,\\"speed\\":2,\\"pan\\":1,\\"room\\":0.6}",
-  "59/64 -> 15/16: {\\"s\\":\\"future:2\\",\\"begin\\":0.25,\\"end\\":0.3125,\\"speed\\":2,\\"pan\\":1,\\"room\\":0.6}",
-  "29/32 -> 59/64: {\\"s\\":\\"future:2\\",\\"begin\\":0.3125,\\"end\\":0.375,\\"speed\\":2,\\"pan\\":1,\\"room\\":0.6}",
-  "57/64 -> 29/32: {\\"s\\":\\"future:2\\",\\"begin\\":0.375,\\"end\\":0.4375,\\"speed\\":2,\\"pan\\":1,\\"room\\":0.6}",
-  "7/8 -> 57/64: {\\"s\\":\\"future:2\\",\\"begin\\":0.4375,\\"end\\":0.5,\\"speed\\":2,\\"pan\\":1,\\"room\\":0.6}",
-  "55/64 -> 7/8: {\\"s\\":\\"future:2\\",\\"begin\\":0.5,\\"end\\":0.5625,\\"speed\\":2,\\"pan\\":1,\\"room\\":0.6}",
-  "27/32 -> 55/64: {\\"s\\":\\"future:2\\",\\"begin\\":0.5625,\\"end\\":0.625,\\"speed\\":2,\\"pan\\":1,\\"room\\":0.6}",
-  "53/64 -> 27/32: {\\"s\\":\\"future:2\\",\\"begin\\":0.625,\\"end\\":0.6875,\\"speed\\":2,\\"pan\\":1,\\"room\\":0.6}",
-  "13/16 -> 53/64: {\\"s\\":\\"future:2\\",\\"begin\\":0.6875,\\"end\\":0.75,\\"speed\\":2,\\"pan\\":1,\\"room\\":0.6}",
-  "51/64 -> 13/16: {\\"s\\":\\"future:2\\",\\"begin\\":0.75,\\"end\\":0.8125,\\"speed\\":2,\\"pan\\":1,\\"room\\":0.6}",
-  "25/32 -> 51/64: {\\"s\\":\\"future:2\\",\\"begin\\":0.8125,\\"end\\":0.875,\\"speed\\":2,\\"pan\\":1,\\"room\\":0.6}",
-  "49/64 -> 25/32: {\\"s\\":\\"future:2\\",\\"begin\\":0.875,\\"end\\":0.9375,\\"speed\\":2,\\"pan\\":1,\\"room\\":0.6}",
-  "3/4 -> 49/64: {\\"s\\":\\"future:2\\",\\"begin\\":0.9375,\\"end\\":1,\\"speed\\":2,\\"pan\\":1,\\"room\\":0.6}",
-  "47/64 -> 3/4: {\\"s\\":\\"future:3\\",\\"begin\\":0,\\"end\\":0.0625,\\"speed\\":2,\\"pan\\":1,\\"room\\":0.6}",
-  "23/32 -> 47/64: {\\"s\\":\\"future:3\\",\\"begin\\":0.0625,\\"end\\":0.125,\\"speed\\":2,\\"pan\\":1,\\"room\\":0.6}",
-  "45/64 -> 23/32: {\\"s\\":\\"future:3\\",\\"begin\\":0.125,\\"end\\":0.1875,\\"speed\\":2,\\"pan\\":1,\\"room\\":0.6}",
-  "11/16 -> 45/64: {\\"s\\":\\"future:3\\",\\"begin\\":0.1875,\\"end\\":0.25,\\"speed\\":2,\\"pan\\":1,\\"room\\":0.6}",
-  "43/64 -> 11/16: {\\"s\\":\\"future:3\\",\\"begin\\":0.25,\\"end\\":0.3125,\\"speed\\":2,\\"pan\\":1,\\"room\\":0.6}",
-  "21/32 -> 43/64: {\\"s\\":\\"future:3\\",\\"begin\\":0.3125,\\"end\\":0.375,\\"speed\\":2,\\"pan\\":1,\\"room\\":0.6}",
-  "41/64 -> 21/32: {\\"s\\":\\"future:3\\",\\"begin\\":0.375,\\"end\\":0.4375,\\"speed\\":2,\\"pan\\":1,\\"room\\":0.6}",
-  "5/8 -> 41/64: {\\"s\\":\\"future:3\\",\\"begin\\":0.4375,\\"end\\":0.5,\\"speed\\":2,\\"pan\\":1,\\"room\\":0.6}",
-  "39/64 -> 5/8: {\\"s\\":\\"future:3\\",\\"begin\\":0.5,\\"end\\":0.5625,\\"speed\\":2,\\"pan\\":1,\\"room\\":0.6}",
-  "19/32 -> 39/64: {\\"s\\":\\"future:3\\",\\"begin\\":0.5625,\\"end\\":0.625,\\"speed\\":2,\\"pan\\":1,\\"room\\":0.6}",
-  "37/64 -> 19/32: {\\"s\\":\\"future:3\\",\\"begin\\":0.625,\\"end\\":0.6875,\\"speed\\":2,\\"pan\\":1,\\"room\\":0.6}",
-  "9/16 -> 37/64: {\\"s\\":\\"future:3\\",\\"begin\\":0.6875,\\"end\\":0.75,\\"speed\\":2,\\"pan\\":1,\\"room\\":0.6}",
-  "35/64 -> 9/16: {\\"s\\":\\"future:3\\",\\"begin\\":0.75,\\"end\\":0.8125,\\"speed\\":2,\\"pan\\":1,\\"room\\":0.6}",
-  "17/32 -> 35/64: {\\"s\\":\\"future:3\\",\\"begin\\":0.8125,\\"end\\":0.875,\\"speed\\":2,\\"pan\\":1,\\"room\\":0.6}",
-  "33/64 -> 17/32: {\\"s\\":\\"future:3\\",\\"begin\\":0.875,\\"end\\":0.9375,\\"speed\\":2,\\"pan\\":1,\\"room\\":0.6}",
-  "1/2 -> 33/64: {\\"s\\":\\"future:3\\",\\"begin\\":0.9375,\\"end\\":1,\\"speed\\":2,\\"pan\\":1,\\"room\\":0.6}",
-  "15/32 -> 1/2: {\\"s\\":\\"sd\\",\\"begin\\":0,\\"end\\":0.0625,\\"pan\\":1,\\"room\\":0.6}",
-  "7/16 -> 15/32: {\\"s\\":\\"sd\\",\\"begin\\":0.0625,\\"end\\":0.125,\\"pan\\":1,\\"room\\":0.6}",
-  "13/32 -> 7/16: {\\"s\\":\\"sd\\",\\"begin\\":0.125,\\"end\\":0.1875,\\"pan\\":1,\\"room\\":0.6}",
-  "3/8 -> 13/32: {\\"s\\":\\"sd\\",\\"begin\\":0.1875,\\"end\\":0.25,\\"pan\\":1,\\"room\\":0.6}",
-  "11/32 -> 3/8: {\\"s\\":\\"sd\\",\\"begin\\":0.25,\\"end\\":0.3125,\\"pan\\":1,\\"room\\":0.6}",
-  "5/16 -> 11/32: {\\"s\\":\\"sd\\",\\"begin\\":0.3125,\\"end\\":0.375,\\"pan\\":1,\\"room\\":0.6}",
-  "9/32 -> 5/16: {\\"s\\":\\"sd\\",\\"begin\\":0.375,\\"end\\":0.4375,\\"pan\\":1,\\"room\\":0.6}",
-  "1/4 -> 9/32: {\\"s\\":\\"sd\\",\\"begin\\":0.4375,\\"end\\":0.5,\\"pan\\":1,\\"room\\":0.6}",
-  "7/32 -> 1/4: {\\"s\\":\\"sd\\",\\"begin\\":0.5,\\"end\\":0.5625,\\"pan\\":1,\\"room\\":0.6}",
-  "3/16 -> 7/32: {\\"s\\":\\"sd\\",\\"begin\\":0.5625,\\"end\\":0.625,\\"pan\\":1,\\"room\\":0.6}",
-  "5/32 -> 3/16: {\\"s\\":\\"sd\\",\\"begin\\":0.625,\\"end\\":0.6875,\\"pan\\":1,\\"room\\":0.6}",
-  "1/8 -> 5/32: {\\"s\\":\\"sd\\",\\"begin\\":0.6875,\\"end\\":0.75,\\"pan\\":1,\\"room\\":0.6}",
-  "3/32 -> 1/8: {\\"s\\":\\"sd\\",\\"begin\\":0.75,\\"end\\":0.8125,\\"pan\\":1,\\"room\\":0.6}",
-  "1/16 -> 3/32: {\\"s\\":\\"sd\\",\\"begin\\":0.8125,\\"end\\":0.875,\\"pan\\":1,\\"room\\":0.6}",
-  "1/32 -> 1/16: {\\"s\\":\\"sd\\",\\"begin\\":0.875,\\"end\\":0.9375,\\"pan\\":1,\\"room\\":0.6}",
-  "0/1 -> 1/32: {\\"s\\":\\"sd\\",\\"begin\\":0.9375,\\"end\\":1,\\"pan\\":1,\\"room\\":0.6}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 296 https://strudel.cc/?Z1mqx-eU-KcX 1`] = `
-[
-  "0/1 -> 831675/814544: {\\"note\\":\\"D0\\",\\"s\\":\\"bell\\",\\"gain\\":0.6,\\"delay\\":0.2,\\"delaytime\\":0.3333333333333333,\\"delayfeedback\\":0.8}",
-  "3/4 -> 1442583/814544: {\\"note\\":\\"A-1\\",\\"s\\":\\"bell\\",\\"gain\\":0.6,\\"delay\\":0.2,\\"delaytime\\":0.3333333333333333,\\"delayfeedback\\":0.8}",
-  "-3/8 -> 62249/203636: {\\"note\\":\\"C4\\",\\"s\\":\\"bell\\",\\"gain\\":0.6,\\"delay\\":0.2,\\"delaytime\\":0.3333333333333333,\\"delayfeedback\\":0.8}",
-  "1/8 -> 933493/814544: {\\"note\\":\\"A1\\",\\"s\\":\\"bell\\",\\"gain\\":0.6,\\"delay\\":0.2,\\"delaytime\\":0.3333333333333333,\\"delayfeedback\\":0.8}",
-  "7/8 -> 1544401/814544: {\\"note\\":\\"G-1\\",\\"s\\":\\"bell\\",\\"gain\\":0.6,\\"delay\\":0.2,\\"delaytime\\":0.3333333333333333,\\"delayfeedback\\":0.8}",
-  "-1/4 -> 175407/407272: {\\"note\\":\\"G6\\",\\"s\\":\\"bell\\",\\"gain\\":0.6,\\"delay\\":0.2,\\"delaytime\\":0.3333333333333333,\\"delayfeedback\\":0.8}",
-  "1/4 -> 1035311/814544: {\\"note\\":\\"C4\\",\\"s\\":\\"bell\\",\\"gain\\":0.6,\\"delay\\":0.2,\\"delaytime\\":0.3333333333333333,\\"delayfeedback\\":0.8}",
-  "0/1 -> 1/2: {\\"note\\":\\"D2\\",\\"s\\":\\"bass\\",\\"clip\\":1,\\"gain\\":0.8}",
-  "1/2 -> 3/4: {\\"note\\":\\"D2\\",\\"s\\":\\"bass\\",\\"clip\\":1,\\"gain\\":0.8}",
-  "3/4 -> 1/1: {\\"note\\":\\"D2\\",\\"s\\":\\"bass\\",\\"clip\\":1,\\"gain\\":0.8}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 297 https://strudel.cc/?Ypr_TlVFjVV5 1`] = `
-[
-  "0/1 -> 1/4: {\\"s\\":\\"p\\",\\"speed\\":0.03125,\\"unit\\":\\"c\\",\\"begin\\":0,\\"end\\":0.0078125,\\"pan\\":0,\\"shape\\":0.4,\\"decay\\":0.1,\\"sustain\\":0.6}",
-  "1/4 -> 1/2: {\\"s\\":\\"p\\",\\"speed\\":0.03125,\\"unit\\":\\"c\\",\\"begin\\":0.0078125,\\"end\\":0.015625,\\"pan\\":0,\\"shape\\":0.4,\\"decay\\":0.1,\\"sustain\\":0.6}",
-  "1/2 -> 3/4: {\\"s\\":\\"p\\",\\"speed\\":0.03125,\\"unit\\":\\"c\\",\\"begin\\":0.015625,\\"end\\":0.0234375,\\"pan\\":0,\\"shape\\":0.4,\\"decay\\":0.1,\\"sustain\\":0.6}",
-  "3/4 -> 1/1: {\\"s\\":\\"p\\",\\"speed\\":0.03125,\\"unit\\":\\"c\\",\\"begin\\":0.0234375,\\"end\\":0.03125,\\"pan\\":0,\\"shape\\":0.4,\\"decay\\":0.1,\\"sustain\\":0.6}",
-  "3/4 -> 1/1: {\\"s\\":\\"p\\",\\"speed\\":0.03125,\\"unit\\":\\"c\\",\\"begin\\":0,\\"end\\":0.0078125,\\"pan\\":1,\\"shape\\":0.4,\\"decay\\":0.1,\\"sustain\\":0.6}",
-  "1/2 -> 3/4: {\\"s\\":\\"p\\",\\"speed\\":0.03125,\\"unit\\":\\"c\\",\\"begin\\":0.0078125,\\"end\\":0.015625,\\"pan\\":1,\\"shape\\":0.4,\\"decay\\":0.1,\\"sustain\\":0.6}",
-  "1/4 -> 1/2: {\\"s\\":\\"p\\",\\"speed\\":0.03125,\\"unit\\":\\"c\\",\\"begin\\":0.015625,\\"end\\":0.0234375,\\"pan\\":1,\\"shape\\":0.4,\\"decay\\":0.1,\\"sustain\\":0.6}",
-  "0/1 -> 1/4: {\\"s\\":\\"p\\",\\"speed\\":0.03125,\\"unit\\":\\"c\\",\\"begin\\":0.0234375,\\"end\\":0.03125,\\"pan\\":1,\\"shape\\":0.4,\\"decay\\":0.1,\\"sustain\\":0.6}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 298 https://strudel.cc/?5pmvveRR-gKc 1`] = `
-[
-  "0/1 -> 1/1: D3",
-  "0/1 -> 2/1: E3",
-  "0/1 -> 4/1: D2",
-  "0/1 -> 1/2: B3",
-  "-1/1 -> 1/1: C#3",
-  "0/1 -> 2/1: C#3",
-  "0/1 -> 1/4: E2",
-  "-1/1 -> 1/1: B2",
-  "0/1 -> 1/1: D3",
-  "0/1 -> 2/1: E3",
-  "0/1 -> 4/1: D2",
-  "0/1 -> 1/2: B3",
-  "-1/1 -> 1/1: C#3",
-  "0/1 -> 2/1: C#3",
-  "0/1 -> 1/4: E2",
-  "-1/1 -> 1/1: B2",
-  "0/1 -> 1/1: D3",
-  "0/1 -> 2/1: E3",
-  "0/1 -> 4/1: D2",
-  "0/1 -> 1/2: B3",
-  "-1/1 -> 1/1: C#3",
-  "0/1 -> 2/1: C#3",
-  "0/1 -> 1/4: E2",
-  "-1/1 -> 1/1: B2",
-  "0/1 -> 1/1: D3",
-  "0/1 -> 2/1: E3",
-  "0/1 -> 4/1: D2",
-  "0/1 -> 1/2: B3",
-  "-1/1 -> 1/1: C#3",
-  "0/1 -> 2/1: C#3",
-  "-1/1 -> 1/1: B2",
-  "0/1 -> 1/1: D3",
-  "0/1 -> 2/1: E3",
-  "0/1 -> 4/1: D2",
-  "0/1 -> 1/2: B3",
-  "-1/1 -> 1/1: C#3",
-  "0/1 -> 2/1: C#3",
-  "-1/1 -> 1/1: B2",
-  "0/1 -> 1/1: D3",
-  "0/1 -> 2/1: E3",
-  "0/1 -> 4/1: D2",
-  "0/1 -> 1/2: B3",
-  "-1/1 -> 1/1: C#3",
-  "0/1 -> 2/1: C#3",
-  "-1/1 -> 1/1: B2",
-  "1/2 -> 1/1: B2",
-  "0/1 -> 1/1: D3",
-  "0/1 -> 2/1: E3",
-  "0/1 -> 4/1: D2",
-  "-1/1 -> 1/1: C#3",
-  "0/1 -> 2/1: C#3",
-  "-1/1 -> 1/1: B2",
-  "1/2 -> 1/1: B2",
-  "0/1 -> 1/1: D3",
-  "0/1 -> 2/1: E3",
-  "0/1 -> 4/1: D2",
-  "-1/1 -> 1/1: C#3",
-  "0/1 -> 2/1: C#3",
-  "3/4 -> 1/1: G2",
-  "-1/1 -> 1/1: B2",
-  "1/2 -> 1/1: B2",
-  "0/1 -> 1/1: D3",
-  "0/1 -> 2/1: E3",
-  "0/1 -> 4/1: D2",
-  "-1/1 -> 1/1: C#3",
-  "0/1 -> 2/1: C#3",
-  "3/4 -> 1/1: G2",
-  "-1/1 -> 1/1: B2",
-  "1/2 -> 1/1: B2",
-  "0/1 -> 1/1: D3",
-  "0/1 -> 2/1: E3",
-  "0/1 -> 4/1: D2",
-  "-1/1 -> 1/1: C#3",
-  "0/1 -> 2/1: C#3",
-  "3/4 -> 1/1: G2",
-  "-1/1 -> 1/1: B2",
-  "1/2 -> 1/1: B2",
-  "0/1 -> 1/1: D3",
-  "0/1 -> 2/1: E3",
-  "0/1 -> 4/1: D2",
-  "-1/1 -> 1/1: C#3",
-  "0/1 -> 2/1: C#3",
-  "3/4 -> 1/1: G2",
-  "-1/1 -> 1/1: B2",
-  "1/2 -> 1/1: B2",
-]
-`;
-
-exports[`renders shared tunes > shared tune 299 https://strudel.cc/?rGJ0heffHHl4 1`] = `
-[
-  "0/1 -> 1/2: {\\"s\\":\\"bd\\",\\"gain\\":0.8}",
-  "1/2 -> 1/1: {\\"s\\":\\"bd\\",\\"gain\\":0.8}",
-  "1/2 -> 1/1: {\\"s\\":\\"sd\\",\\"gain\\":0.5}",
-  "1/4 -> 1/2: {\\"s\\":\\"hh\\",\\"delay\\":0.3,\\"delayfeedback\\":0.5,\\"delaytime\\":0.125,\\"gain\\":0.4}",
-  "3/4 -> 1/1: {\\"s\\":\\"hh\\",\\"delay\\":0.3,\\"delayfeedback\\":0.5,\\"delaytime\\":0.125,\\"gain\\":0.4}",
-  "0/1 -> 1/2: {\\"note\\":\\"B1\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":1,\\"cutoff\\":500}",
-  "3/4 -> 1/1: {\\"note\\":\\"B1\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0.001,\\"decay\\":0.2,\\"sustain\\":1,\\"cutoff\\":500}",
-  "1/4 -> 1/3: {\\"note\\":\\"A3\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":1200,\\"gain\\":0.5,\\"attack\\":0,\\"decay\\":0.16,\\"sustain\\":0,\\"release\\":0.1,\\"delay\\":0.4,\\"delaytime\\":0.12}",
-  "1/4 -> 1/3: {\\"note\\":\\"C#4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":1200,\\"gain\\":0.5,\\"attack\\":0,\\"decay\\":0.16,\\"sustain\\":0,\\"release\\":0.1,\\"delay\\":0.4,\\"delaytime\\":0.12}",
-  "1/4 -> 1/3: {\\"note\\":\\"D4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":1200,\\"gain\\":0.5,\\"attack\\":0,\\"decay\\":0.16,\\"sustain\\":0,\\"release\\":0.1,\\"delay\\":0.4,\\"delaytime\\":0.12}",
-  "1/4 -> 1/3: {\\"note\\":\\"F#4\\",\\"s\\":\\"sawtooth\\",\\"cutoff\\":1200,\\"gain\\":0.5,\\"attack\\":0,\\"decay\\":0.16,\\"sustain\\":0,\\"release\\":0.1,\\"delay\\":0.4,\\"delaytime\\":0.12}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 300 https://strudel.cc/?Z7Nxzf3lmgTN 1`] = `
-[
-  "0/1 -> 8/1: {\\"note\\":\\"e3\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.2,\\"sustain\\":0.3,\\"release\\":0.1,\\"bandf\\":100,\\"bandq\\":1,\\"gain\\":3}",
-  "0/1 -> 8/1: {\\"note\\":\\"b4\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.2,\\"sustain\\":0.3,\\"release\\":0.1,\\"bandf\\":100,\\"bandq\\":1,\\"gain\\":3}",
-  "0/1 -> 8/1: {\\"note\\":\\"d4\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.2,\\"sustain\\":0.3,\\"release\\":0.1,\\"bandf\\":100,\\"bandq\\":1,\\"gain\\":3}",
-  "0/1 -> 8/1: {\\"note\\":\\"a4\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.2,\\"sustain\\":0.3,\\"release\\":0.1,\\"bandf\\":100,\\"bandq\\":1,\\"gain\\":3}",
-  "2/3 -> 1/1: {\\"s\\":\\"hh\\"}",
-  "1/2 -> 2/3: {\\"s\\":\\"hh\\"}",
-  "1/3 -> 1/2: {\\"s\\":\\"hh\\"}",
-  "1/6 -> 1/3: {\\"s\\":\\"hh\\"}",
-  "1/12 -> 1/6: {\\"s\\":\\"hh\\"}",
-  "0/1 -> 1/12: {\\"s\\":\\"hh\\"}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 301 https://strudel.cc/?e63x61eOPPvl 1`] = `
-[
-  "0/1 -> 8/1: {\\"note\\":\\"e3\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.2,\\"sustain\\":0.3,\\"release\\":0.1,\\"bandf\\":100,\\"bandq\\":1,\\"gain\\":3}",
-  "0/1 -> 8/1: {\\"note\\":\\"b4\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.2,\\"sustain\\":0.3,\\"release\\":0.1,\\"bandf\\":100,\\"bandq\\":1,\\"gain\\":3}",
-  "0/1 -> 8/1: {\\"note\\":\\"a4\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.2,\\"sustain\\":0.3,\\"release\\":0.1,\\"bandf\\":100,\\"bandq\\":1,\\"gain\\":3}",
-  "0/1 -> 8/1: {\\"note\\":\\"g#4\\",\\"s\\":\\"sawtooth\\",\\"attack\\":0.1,\\"decay\\":0.2,\\"sustain\\":0.3,\\"release\\":0.1,\\"bandf\\":100,\\"bandq\\":1,\\"gain\\":3}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 302 https://strudel.cc/?bUd8QxyN4kvJ 1`] = `
-[
-  "0/1 -> 1/8: {\\"note\\":\\"g4\\",\\"s\\":\\"xx\\",\\"cutoff\\":2348.1232826650858,\\"room\\":0.8,\\"pan\\":0,\\"gain\\":0.5}",
-  "3/8 -> 1/2: {\\"note\\":\\"g4\\",\\"s\\":\\"xx\\",\\"cutoff\\":2919.6960066389074,\\"room\\":0.8,\\"pan\\":0,\\"gain\\":0.5}",
-  "3/4 -> 7/8: {\\"note\\":\\"g4\\",\\"s\\":\\"xx\\",\\"cutoff\\":3416.106511416007,\\"room\\":0.8,\\"pan\\":0,\\"gain\\":0.5}",
-  "-1/4 -> 1/4: {\\"note\\":\\"c5\\",\\"n\\":7,\\"s\\":\\"xx\\",\\"cutoff\\":2445.9378331807884,\\"room\\":0.8,\\"pan\\":0,\\"gain\\":0.5}",
-  "1/4 -> 3/8: {\\"note\\":\\"g4\\",\\"n\\":7,\\"s\\":\\"xx\\",\\"cutoff\\":2734.462144993486,\\"room\\":0.8,\\"pan\\":0,\\"gain\\":0.5}",
-  "5/8 -> 3/4: {\\"note\\":\\"g4\\",\\"n\\":7,\\"s\\":\\"xx\\",\\"cutoff\\":3262.67476831466,\\"room\\":0.8,\\"pan\\":0,\\"gain\\":0.5}",
-  "-3/8 -> 1/8: {\\"note\\":\\"c5\\",\\"n\\":12,\\"s\\":\\"xx\\",\\"cutoff\\":2348.1232826650858,\\"room\\":0.8,\\"pan\\":0,\\"gain\\":0.5}",
-  "1/8 -> 1/4: {\\"note\\":\\"g4\\",\\"n\\":12,\\"s\\":\\"xx\\",\\"cutoff\\":2543.1358907832887,\\"room\\":0.8,\\"pan\\":0,\\"gain\\":0.5}",
-  "1/2 -> 5/8: {\\"note\\":\\"g4\\",\\"n\\":12,\\"s\\":\\"xx\\",\\"cutoff\\":3096.5080524341697,\\"room\\":0.8,\\"pan\\":0,\\"gain\\":0.5}",
-  "7/8 -> 1/1: {\\"note\\":\\"g4\\",\\"n\\":12,\\"s\\":\\"xx\\",\\"cutoff\\":3554.87378854554,\\"room\\":0.8,\\"pan\\":0,\\"gain\\":0.5}",
-  "-1/8 -> 3/8: {\\"note\\":\\"c5\\",\\"n\\":19,\\"s\\":\\"xx\\",\\"cutoff\\":2543.1358907832887,\\"room\\":0.8,\\"pan\\":0,\\"gain\\":0.5}",
-  "-1/8 -> 3/8: {\\"note\\":\\"c5\\",\\"n\\":19,\\"s\\":\\"xx\\",\\"cutoff\\":2543.1358907832887,\\"room\\":0.8,\\"pan\\":0,\\"gain\\":0.5}",
-  "3/8 -> 1/2: {\\"note\\":\\"g4\\",\\"n\\":19,\\"s\\":\\"xx\\",\\"cutoff\\":2919.6960066389074,\\"room\\":0.8,\\"pan\\":0,\\"gain\\":0.5}",
-  "3/4 -> 7/8: {\\"note\\":\\"g4\\",\\"n\\":19,\\"s\\":\\"xx\\",\\"cutoff\\":3416.106511416007,\\"room\\":0.8,\\"pan\\":0,\\"gain\\":0.5}",
-  "7/8 -> 1/1: {\\"note\\":\\"g4\\",\\"s\\":\\"xx\\",\\"cutoff\\":2348.1232826650858,\\"room\\":0.8,\\"pan\\":1,\\"gain\\":0.5}",
-  "1/2 -> 5/8: {\\"note\\":\\"g4\\",\\"s\\":\\"xx\\",\\"cutoff\\":2919.6960066389074,\\"room\\":0.8,\\"pan\\":1,\\"gain\\":0.5}",
-  "1/8 -> 1/4: {\\"note\\":\\"g4\\",\\"s\\":\\"xx\\",\\"cutoff\\":3416.106511416007,\\"room\\":0.8,\\"pan\\":1,\\"gain\\":0.5}",
-  "3/4 -> 5/4: {\\"note\\":\\"c5\\",\\"n\\":7,\\"s\\":\\"xx\\",\\"cutoff\\":2445.9378331807884,\\"room\\":0.8,\\"pan\\":1,\\"gain\\":0.5}",
-  "5/8 -> 3/4: {\\"note\\":\\"g4\\",\\"n\\":7,\\"s\\":\\"xx\\",\\"cutoff\\":2734.462144993486,\\"room\\":0.8,\\"pan\\":1,\\"gain\\":0.5}",
-  "1/4 -> 3/8: {\\"note\\":\\"g4\\",\\"n\\":7,\\"s\\":\\"xx\\",\\"cutoff\\":3262.67476831466,\\"room\\":0.8,\\"pan\\":1,\\"gain\\":0.5}",
-  "7/8 -> 11/8: {\\"note\\":\\"c5\\",\\"n\\":12,\\"s\\":\\"xx\\",\\"cutoff\\":2348.1232826650858,\\"room\\":0.8,\\"pan\\":1,\\"gain\\":0.5}",
-  "3/4 -> 7/8: {\\"note\\":\\"g4\\",\\"n\\":12,\\"s\\":\\"xx\\",\\"cutoff\\":2543.1358907832887,\\"room\\":0.8,\\"pan\\":1,\\"gain\\":0.5}",
-  "3/8 -> 1/2: {\\"note\\":\\"g4\\",\\"n\\":12,\\"s\\":\\"xx\\",\\"cutoff\\":3096.5080524341697,\\"room\\":0.8,\\"pan\\":1,\\"gain\\":0.5}",
-  "0/1 -> 1/8: {\\"note\\":\\"g4\\",\\"n\\":12,\\"s\\":\\"xx\\",\\"cutoff\\":3554.87378854554,\\"room\\":0.8,\\"pan\\":1,\\"gain\\":0.5}",
-  "5/8 -> 9/8: {\\"note\\":\\"c5\\",\\"n\\":19,\\"s\\":\\"xx\\",\\"cutoff\\":2543.1358907832887,\\"room\\":0.8,\\"pan\\":1,\\"gain\\":0.5}",
-  "5/8 -> 9/8: {\\"note\\":\\"c5\\",\\"n\\":19,\\"s\\":\\"xx\\",\\"cutoff\\":2543.1358907832887,\\"room\\":0.8,\\"pan\\":1,\\"gain\\":0.5}",
-  "1/2 -> 5/8: {\\"note\\":\\"g4\\",\\"n\\":19,\\"s\\":\\"xx\\",\\"cutoff\\":2919.6960066389074,\\"room\\":0.8,\\"pan\\":1,\\"gain\\":0.5}",
-  "1/8 -> 1/4: {\\"note\\":\\"g4\\",\\"n\\":19,\\"s\\":\\"xx\\",\\"cutoff\\":3416.106511416007,\\"room\\":0.8,\\"pan\\":1,\\"gain\\":0.5}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 303 https://strudel.cc/?y5PdLktz5gnb 1`] = `
-[
-  "0/1 -> 1/4: {\\"note\\":\\"e3\\",\\"s\\":\\"sawtooth\\",\\"decay\\":0.1,\\"sustain\\":0.1,\\"bandf\\":50,\\"bandq\\":0.5,\\"gain\\":3.8519497029047303}",
-  "1/4 -> 1/2: {\\"note\\":\\"e3\\",\\"s\\":\\"sawtooth\\",\\"decay\\":0.1,\\"sustain\\":0.1,\\"bandf\\":50,\\"bandq\\":0.5,\\"gain\\":2.22836140246614}",
-  "1/2 -> 3/4: {\\"note\\":\\"e3\\",\\"s\\":\\"sawtooth\\",\\"decay\\":0.1,\\"sustain\\":0.1,\\"bandf\\":50,\\"bandq\\":0.5,\\"gain\\":2.22836140246614}",
-  "3/4 -> 1/1: {\\"note\\":\\"e3\\",\\"s\\":\\"sawtooth\\",\\"decay\\":0.1,\\"sustain\\":0.1,\\"bandf\\":50,\\"bandq\\":0.5,\\"gain\\":3.8519497029047303}",
-  "0/1 -> 1/4: {\\"note\\":\\"b4\\",\\"s\\":\\"sawtooth\\",\\"decay\\":0.1,\\"sustain\\":0.1,\\"bandf\\":50,\\"bandq\\":0.5,\\"gain\\":3.8519497029047303}",
-  "1/4 -> 1/2: {\\"note\\":\\"b4\\",\\"s\\":\\"sawtooth\\",\\"decay\\":0.1,\\"sustain\\":0.1,\\"bandf\\":50,\\"bandq\\":0.5,\\"gain\\":2.22836140246614}",
-  "1/2 -> 3/4: {\\"note\\":\\"b4\\",\\"s\\":\\"sawtooth\\",\\"decay\\":0.1,\\"sustain\\":0.1,\\"bandf\\":50,\\"bandq\\":0.5,\\"gain\\":2.22836140246614}",
-  "3/4 -> 1/1: {\\"note\\":\\"b4\\",\\"s\\":\\"sawtooth\\",\\"decay\\":0.1,\\"sustain\\":0.1,\\"bandf\\":50,\\"bandq\\":0.5,\\"gain\\":3.8519497029047303}",
-  "0/1 -> 1/4: {\\"note\\":\\"a4\\",\\"s\\":\\"sawtooth\\",\\"decay\\":0.1,\\"sustain\\":0.1,\\"bandf\\":50,\\"bandq\\":0.5,\\"gain\\":3.8519497029047303}",
-  "1/4 -> 1/2: {\\"note\\":\\"a4\\",\\"s\\":\\"sawtooth\\",\\"decay\\":0.1,\\"sustain\\":0.1,\\"bandf\\":50,\\"bandq\\":0.5,\\"gain\\":2.22836140246614}",
-  "1/2 -> 3/4: {\\"note\\":\\"a4\\",\\"s\\":\\"sawtooth\\",\\"decay\\":0.1,\\"sustain\\":0.1,\\"bandf\\":50,\\"bandq\\":0.5,\\"gain\\":2.22836140246614}",
-  "3/4 -> 1/1: {\\"note\\":\\"a4\\",\\"s\\":\\"sawtooth\\",\\"decay\\":0.1,\\"sustain\\":0.1,\\"bandf\\":50,\\"bandq\\":0.5,\\"gain\\":3.8519497029047303}",
-  "0/1 -> 1/4: {\\"note\\":\\"g#4\\",\\"s\\":\\"sawtooth\\",\\"decay\\":0.1,\\"sustain\\":0.1,\\"bandf\\":50,\\"bandq\\":0.5,\\"gain\\":3.8519497029047303}",
-  "1/4 -> 1/2: {\\"note\\":\\"g#4\\",\\"s\\":\\"sawtooth\\",\\"decay\\":0.1,\\"sustain\\":0.1,\\"bandf\\":50,\\"bandq\\":0.5,\\"gain\\":2.22836140246614}",
-  "1/2 -> 3/4: {\\"note\\":\\"g#4\\",\\"s\\":\\"sawtooth\\",\\"decay\\":0.1,\\"sustain\\":0.1,\\"bandf\\":50,\\"bandq\\":0.5,\\"gain\\":2.22836140246614}",
-  "3/4 -> 1/1: {\\"note\\":\\"g#4\\",\\"s\\":\\"sawtooth\\",\\"decay\\":0.1,\\"sustain\\":0.1,\\"bandf\\":50,\\"bandq\\":0.5,\\"gain\\":3.8519497029047303}",
-  "0/1 -> 2/1: {\\"s\\":\\"bd\\",\\"decay\\":0.1}",
-  "3/4 -> 1/1: {\\"s\\":\\"hh\\",\\"gain\\":0.4}",
-  "1/2 -> 3/4: {\\"s\\":\\"hh\\",\\"gain\\":1}",
-  "1/4 -> 1/2: {\\"s\\":\\"hh\\",\\"gain\\":0.4}",
-  "0/1 -> 1/4: {\\"s\\":\\"hh\\",\\"gain\\":1}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 304 https://strudel.cc/?BpChMc3nxrYv 1`] = `
-[
-  "0/1 -> 3/2: {\\"s\\":\\"bd\\",\\"speed\\":0.7519542165100574}",
-  "3/4 -> 3/2: {\\"s\\":\\"sd\\",\\"speed\\":0.7931522866332671}",
-  "3/8 -> 3/4: {\\"s\\":\\"hh\\",\\"speed\\":0.7285963821098448}",
-  "3/4 -> 9/8: {\\"s\\":\\"hh\\",\\"speed\\":0.77531205091027}",
-  "0/1 -> 3/2: {\\"n\\":33.129885541275144,\\"decay\\":0.15,\\"sustain\\":0,\\"s\\":\\"sawtooth\\",\\"gain\\":0.4,\\"cutoff\\":3669.6267869262615}",
-  "0/1 -> 3/2: {\\"n\\":33.17988554127514,\\"decay\\":0.15,\\"sustain\\":0,\\"s\\":\\"sawtooth\\",\\"gain\\":0.4,\\"cutoff\\":3669.6267869262615}",
-  "0/1 -> 3/2: {\\"n\\":55.129885541275144,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":59.129885541275144,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":60.129885541275144,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":64.12988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":55.16988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":59.16988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":60.16988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":64.16988554127515,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "3/16 -> 3/8: {\\"n\\":69.01266877519555,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/8 -> 9/16: {\\"n\\":69.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/8 -> 9/16: {\\"n\\":72.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/4 -> 15/16: {\\"n\\":72.16001184806132,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "15/16 -> 9/8: {\\"n\\":72.21301072199333,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/16 -> 3/8: {\\"n\\":69.05266877519557,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/8 -> 9/16: {\\"n\\":69.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/8 -> 9/16: {\\"n\\":72.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/4 -> 15/16: {\\"n\\":72.20001184806131,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "15/16 -> 9/8: {\\"n\\":72.25301072199335,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "0/1 -> 3/16: {\\"n\\":93.00057728554401,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "0/1 -> 3/16: {\\"n\\":93.04057728554402,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "3/8 -> 9/16: {\\"n\\":69.01266877519555,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "9/16 -> 3/4: {\\"n\\":69.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "9/16 -> 3/4: {\\"n\\":72.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "15/16 -> 9/8: {\\"n\\":72.16001184806132,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "3/8 -> 9/16: {\\"n\\":69.05266877519557,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "9/16 -> 3/4: {\\"n\\":69.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "9/16 -> 3/4: {\\"n\\":72.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "15/16 -> 9/8: {\\"n\\":72.20001184806131,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "3/16 -> 3/8: {\\"n\\":93.00057728554401,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "3/16 -> 3/8: {\\"n\\":93.04057728554402,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "9/16 -> 3/4: {\\"n\\":69.01266877519555,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "3/4 -> 15/16: {\\"n\\":69.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "3/4 -> 15/16: {\\"n\\":72.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "9/16 -> 3/4: {\\"n\\":69.05266877519557,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "3/4 -> 15/16: {\\"n\\":69.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "3/4 -> 15/16: {\\"n\\":72.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "0/1 -> 3/16: {\\"n\\":72.0468455057745,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "0/1 -> 3/16: {\\"n\\":93.0468455057745,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "3/8 -> 9/16: {\\"n\\":93.00057728554401,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "0/1 -> 3/16: {\\"n\\":72.0868455057745,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "0/1 -> 3/16: {\\"n\\":93.0868455057745,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "3/8 -> 9/16: {\\"n\\":93.04057728554402,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "3/4 -> 15/16: {\\"n\\":69.01266877519555,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "15/16 -> 9/8: {\\"n\\":69.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "3/4 -> 15/16: {\\"n\\":69.05266877519557,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "15/16 -> 9/8: {\\"n\\":69.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 305 https://strudel.cc/?Swuvt887AOe1 1`] = `
-[
-  "0/1 -> 3/2: {\\"s\\":\\"bd\\",\\"speed\\":0.7519542165100574}",
-  "3/4 -> 3/2: {\\"s\\":\\"sd\\",\\"speed\\":0.7931522866332671}",
-  "3/8 -> 3/4: {\\"s\\":\\"hh\\",\\"speed\\":0.7285963821098448}",
-  "3/4 -> 9/8: {\\"s\\":\\"hh\\",\\"speed\\":0.77531205091027}",
-  "0/1 -> 3/2: {\\"n\\":33.129885541275144,\\"decay\\":0.15,\\"sustain\\":0,\\"s\\":\\"sawtooth\\",\\"gain\\":0.4,\\"cutoff\\":3669.6267869262615}",
-  "0/1 -> 3/2: {\\"n\\":33.17988554127514,\\"decay\\":0.15,\\"sustain\\":0,\\"s\\":\\"sawtooth\\",\\"gain\\":0.4,\\"cutoff\\":3669.6267869262615}",
-  "0/1 -> 3/2: {\\"n\\":55.129885541275144,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":59.129885541275144,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":60.129885541275144,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":64.12988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":55.16988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":59.16988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":60.16988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 3/2: {\\"n\\":64.16988554127515,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "3/16 -> 3/8: {\\"n\\":69.01266877519555,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/8 -> 9/16: {\\"n\\":69.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/8 -> 9/16: {\\"n\\":72.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/4 -> 15/16: {\\"n\\":72.16001184806132,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "15/16 -> 9/8: {\\"n\\":72.21301072199333,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/16 -> 3/8: {\\"n\\":69.05266877519557,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/8 -> 9/16: {\\"n\\":69.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/8 -> 9/16: {\\"n\\":72.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "3/4 -> 15/16: {\\"n\\":72.20001184806131,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "15/16 -> 9/8: {\\"n\\":72.25301072199335,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "0/1 -> 3/16: {\\"n\\":93.00057728554401,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "0/1 -> 3/16: {\\"n\\":93.04057728554402,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "3/8 -> 9/16: {\\"n\\":69.01266877519555,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "9/16 -> 3/4: {\\"n\\":69.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "9/16 -> 3/4: {\\"n\\":72.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "15/16 -> 9/8: {\\"n\\":72.16001184806132,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "3/8 -> 9/16: {\\"n\\":69.05266877519557,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "9/16 -> 3/4: {\\"n\\":69.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "9/16 -> 3/4: {\\"n\\":72.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "15/16 -> 9/8: {\\"n\\":72.20001184806131,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "3/16 -> 3/8: {\\"n\\":93.00057728554401,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "3/16 -> 3/8: {\\"n\\":93.04057728554402,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "9/16 -> 3/4: {\\"n\\":69.01266877519555,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "3/4 -> 15/16: {\\"n\\":69.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "3/4 -> 15/16: {\\"n\\":72.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "9/16 -> 3/4: {\\"n\\":69.05266877519557,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "3/4 -> 15/16: {\\"n\\":69.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "3/4 -> 15/16: {\\"n\\":72.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "0/1 -> 3/16: {\\"n\\":72.0468455057745,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "0/1 -> 3/16: {\\"n\\":93.0468455057745,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "3/8 -> 9/16: {\\"n\\":93.00057728554401,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "0/1 -> 3/16: {\\"n\\":72.0868455057745,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "0/1 -> 3/16: {\\"n\\":93.0868455057745,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "3/8 -> 9/16: {\\"n\\":93.04057728554402,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "3/4 -> 15/16: {\\"n\\":69.01266877519555,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "15/16 -> 9/8: {\\"n\\":69.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "3/4 -> 15/16: {\\"n\\":69.05266877519557,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "15/16 -> 9/8: {\\"n\\":69.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 306 https://strudel.cc/?UboMuFOnT0hy 1`] = `
-[
-  "0/1 -> 1/3: {\\"s\\":\\"bd\\"}",
-  "1/3 -> 2/3: {\\"s\\":\\"hh\\"}",
-  "2/3 -> 1/1: {\\"s\\":\\"sn\\"}",
-  "0/1 -> 1/20: {\\"note\\":\\"G4\\",\\"s\\":\\"rhodes\\",\\"clip\\":1,\\"room\\":0.5,\\"delay\\":0.3,\\"delayfeedback\\":0.4,\\"delaytime\\":0.08333333333333333,\\"gain\\":0.5}",
-  "1/6 -> 13/60: {\\"note\\":\\"G4\\",\\"s\\":\\"rhodes\\",\\"clip\\":1,\\"room\\":0.5,\\"delay\\":0.3,\\"delayfeedback\\":0.4,\\"delaytime\\":0.08333333333333333,\\"gain\\":0.5}",
-  "1/3 -> 23/60: {\\"note\\":\\"B3\\",\\"s\\":\\"rhodes\\",\\"clip\\":1,\\"room\\":0.5,\\"delay\\":0.3,\\"delayfeedback\\":0.4,\\"delaytime\\":0.08333333333333333,\\"gain\\":0.5}",
-  "1/2 -> 11/20: {\\"note\\":\\"B3\\",\\"s\\":\\"rhodes\\",\\"clip\\":1,\\"room\\":0.5,\\"delay\\":0.3,\\"delayfeedback\\":0.4,\\"delaytime\\":0.08333333333333333,\\"gain\\":0.5}",
-  "1/3 -> 23/60: {\\"note\\":\\"E4\\",\\"s\\":\\"rhodes\\",\\"clip\\":1,\\"room\\":0.5,\\"delay\\":0.3,\\"delayfeedback\\":0.4,\\"delaytime\\":0.08333333333333333,\\"gain\\":0.5}",
-  "1/2 -> 11/20: {\\"note\\":\\"E4\\",\\"s\\":\\"rhodes\\",\\"clip\\":1,\\"room\\":0.5,\\"delay\\":0.3,\\"delayfeedback\\":0.4,\\"delaytime\\":0.08333333333333333,\\"gain\\":0.5}",
-  "2/3 -> 43/60: {\\"note\\":\\"G3\\",\\"s\\":\\"rhodes\\",\\"clip\\":1,\\"room\\":0.5,\\"delay\\":0.3,\\"delayfeedback\\":0.4,\\"delaytime\\":0.08333333333333333,\\"gain\\":0.5}",
-  "5/6 -> 53/60: {\\"note\\":\\"G3\\",\\"s\\":\\"rhodes\\",\\"clip\\":1,\\"room\\":0.5,\\"delay\\":0.3,\\"delayfeedback\\":0.4,\\"delaytime\\":0.08333333333333333,\\"gain\\":0.5}",
-  "0/1 -> 4/3: {\\"note\\":\\"c2\\",\\"gain\\":0.3,\\"s\\":\\"sawtooth\\",\\"cutoff\\":600}",
-  "0/1 -> 4/3: {\\"note\\":\\"c2\\",\\"gain\\":0.3,\\"s\\":\\"sawtooth\\",\\"cutoff\\":600}",
-  "0/1 -> 4/3: {\\"note\\":36.02,\\"gain\\":0.3,\\"s\\":\\"sawtooth\\",\\"cutoff\\":600}",
-  "0/1 -> 4/3: {\\"note\\":36.02,\\"gain\\":0.3,\\"s\\":\\"sawtooth\\",\\"cutoff\\":600}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 307 https://strudel.cc/?vYFGpZ6XObVG 1`] = `
-[
-  "0/1 -> 1/3: {\\"s\\":\\"bd\\"}",
-  "1/3 -> 2/3: {\\"s\\":\\"hh\\"}",
-  "2/3 -> 1/1: {\\"s\\":\\"sn\\"}",
-  "0/1 -> 1/20: {\\"note\\":\\"G4\\",\\"s\\":\\"rhodes\\",\\"clip\\":1,\\"room\\":0.5,\\"delay\\":0.3,\\"delayfeedback\\":0.4,\\"delaytime\\":0.08333333333333333,\\"gain\\":0.5}",
-  "1/6 -> 13/60: {\\"note\\":\\"G4\\",\\"s\\":\\"rhodes\\",\\"clip\\":1,\\"room\\":0.5,\\"delay\\":0.3,\\"delayfeedback\\":0.4,\\"delaytime\\":0.08333333333333333,\\"gain\\":0.5}",
-  "1/3 -> 23/60: {\\"note\\":\\"B3\\",\\"s\\":\\"rhodes\\",\\"clip\\":1,\\"room\\":0.5,\\"delay\\":0.3,\\"delayfeedback\\":0.4,\\"delaytime\\":0.08333333333333333,\\"gain\\":0.5}",
-  "1/2 -> 11/20: {\\"note\\":\\"B3\\",\\"s\\":\\"rhodes\\",\\"clip\\":1,\\"room\\":0.5,\\"delay\\":0.3,\\"delayfeedback\\":0.4,\\"delaytime\\":0.08333333333333333,\\"gain\\":0.5}",
-  "1/3 -> 23/60: {\\"note\\":\\"E4\\",\\"s\\":\\"rhodes\\",\\"clip\\":1,\\"room\\":0.5,\\"delay\\":0.3,\\"delayfeedback\\":0.4,\\"delaytime\\":0.08333333333333333,\\"gain\\":0.5}",
-  "1/2 -> 11/20: {\\"note\\":\\"E4\\",\\"s\\":\\"rhodes\\",\\"clip\\":1,\\"room\\":0.5,\\"delay\\":0.3,\\"delayfeedback\\":0.4,\\"delaytime\\":0.08333333333333333,\\"gain\\":0.5}",
-  "2/3 -> 43/60: {\\"note\\":\\"G3\\",\\"s\\":\\"rhodes\\",\\"clip\\":1,\\"room\\":0.5,\\"delay\\":0.3,\\"delayfeedback\\":0.4,\\"delaytime\\":0.08333333333333333,\\"gain\\":0.5}",
-  "5/6 -> 53/60: {\\"note\\":\\"G3\\",\\"s\\":\\"rhodes\\",\\"clip\\":1,\\"room\\":0.5,\\"delay\\":0.3,\\"delayfeedback\\":0.4,\\"delaytime\\":0.08333333333333333,\\"gain\\":0.5}",
-  "0/1 -> 4/3: {\\"note\\":\\"c2\\",\\"gain\\":0.3,\\"s\\":\\"sawtooth\\",\\"cutoff\\":600}",
-  "0/1 -> 4/3: {\\"note\\":\\"c2\\",\\"gain\\":0.3,\\"s\\":\\"sawtooth\\",\\"cutoff\\":600}",
-  "0/1 -> 4/3: {\\"note\\":36.02,\\"gain\\":0.3,\\"s\\":\\"sawtooth\\",\\"cutoff\\":600}",
-  "0/1 -> 4/3: {\\"note\\":36.02,\\"gain\\":0.3,\\"s\\":\\"sawtooth\\",\\"cutoff\\":600}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 308 https://strudel.cc/?TUw_9DfBSsiW 1`] = `
-[
-  "0/1 -> 2/3: {\\"s\\":\\"bd\\",\\"speed\\":0.7519542165100574}",
-  "1/3 -> 2/3: {\\"s\\":\\"sd\\",\\"speed\\":0.7931522866332671}",
-  "1/6 -> 1/3: {\\"s\\":\\"hh\\",\\"speed\\":0.7285963821098448}",
-  "1/3 -> 1/2: {\\"s\\":\\"hh\\",\\"speed\\":0.77531205091027}",
-  "1/2 -> 2/3: {\\"s\\":\\"hh\\",\\"speed\\":0.80224046928206}",
-  "2/3 -> 4/3: {\\"s\\":\\"bd\\",\\"speed\\":0.8479069285094738}",
-  "5/6 -> 1/1: {\\"s\\":\\"hh\\",\\"speed\\":0.8281258666335816}",
-  "0/1 -> 2/3: {\\"n\\":33.129885541275144,\\"decay\\":0.15,\\"sustain\\":0,\\"s\\":\\"sawtooth\\",\\"gain\\":0.4,\\"cutoff\\":3669.6267869262615}",
-  "2/3 -> 1/1: {\\"n\\":35.28254374134849,\\"decay\\":0.15,\\"sustain\\":0,\\"s\\":\\"sawtooth\\",\\"gain\\":0.4,\\"cutoff\\":4767.276839570684}",
-  "0/1 -> 2/3: {\\"n\\":33.17988554127514,\\"decay\\":0.15,\\"sustain\\":0,\\"s\\":\\"sawtooth\\",\\"gain\\":0.4,\\"cutoff\\":3669.6267869262615}",
-  "2/3 -> 1/1: {\\"n\\":35.33254374134849,\\"decay\\":0.15,\\"sustain\\":0,\\"s\\":\\"sawtooth\\",\\"gain\\":0.4,\\"cutoff\\":4767.276839570684}",
-  "0/1 -> 2/3: {\\"n\\":55.129885541275144,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 2/3: {\\"n\\":55.129885541275144,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 2/3: {\\"n\\":59.129885541275144,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 2/3: {\\"n\\":59.129885541275144,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 2/3: {\\"n\\":60.129885541275144,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 2/3: {\\"n\\":60.129885541275144,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 2/3: {\\"n\\":64.12988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 2/3: {\\"n\\":64.12988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "2/3 -> 4/3: {\\"n\\":55.369767321273685,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "2/3 -> 4/3: {\\"n\\":55.369767321273685,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "2/3 -> 4/3: {\\"n\\":59.369767321273685,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "2/3 -> 4/3: {\\"n\\":59.369767321273685,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "2/3 -> 4/3: {\\"n\\":60.369767321273685,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "2/3 -> 4/3: {\\"n\\":60.369767321273685,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "2/3 -> 4/3: {\\"n\\":64.36976732127368,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "2/3 -> 4/3: {\\"n\\":64.36976732127368,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 2/3: {\\"n\\":55.16988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 2/3: {\\"n\\":55.16988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 2/3: {\\"n\\":59.16988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 2/3: {\\"n\\":59.16988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 2/3: {\\"n\\":60.16988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 2/3: {\\"n\\":60.16988554127514,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 2/3: {\\"n\\":64.16988554127515,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "0/1 -> 2/3: {\\"n\\":64.16988554127515,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "2/3 -> 4/3: {\\"n\\":55.409767321273684,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "2/3 -> 4/3: {\\"n\\":55.409767321273684,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "2/3 -> 4/3: {\\"n\\":59.409767321273684,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "2/3 -> 4/3: {\\"n\\":59.409767321273684,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "2/3 -> 4/3: {\\"n\\":60.409767321273684,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "2/3 -> 4/3: {\\"n\\":60.409767321273684,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "2/3 -> 4/3: {\\"n\\":64.40976732127369,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "2/3 -> 4/3: {\\"n\\":64.40976732127369,\\"s\\":\\"sawtooth\\",\\"gain\\":0.16,\\"cutoff\\":500,\\"attack\\":1}",
-  "1/12 -> 1/6: {\\"n\\":69.01266877519555,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "1/6 -> 1/4: {\\"n\\":69.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "1/6 -> 1/4: {\\"n\\":72.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "1/3 -> 5/12: {\\"n\\":72.16001184806132,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "5/12 -> 1/2: {\\"n\\":72.21301072199333,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "5/12 -> 1/2: {\\"n\\":88.21301072199333,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "7/12 -> 2/3: {\\"n\\":88.25919484626601,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "1/12 -> 1/6: {\\"n\\":69.05266877519557,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "1/6 -> 1/4: {\\"n\\":69.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "1/6 -> 1/4: {\\"n\\":72.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "1/3 -> 5/12: {\\"n\\":72.20001184806131,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "5/12 -> 1/2: {\\"n\\":72.25301072199335,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "5/12 -> 1/2: {\\"n\\":88.25301072199335,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "7/12 -> 2/3: {\\"n\\":88.29919484626603,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.15}",
-  "0/1 -> 1/12: {\\"n\\":93.00057728554401,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "0/1 -> 1/12: {\\"n\\":93.04057728554402,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "1/6 -> 1/4: {\\"n\\":69.01266877519555,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "1/4 -> 1/3: {\\"n\\":69.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "1/4 -> 1/3: {\\"n\\":72.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "5/12 -> 1/2: {\\"n\\":72.16001184806132,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "1/2 -> 7/12: {\\"n\\":72.21301072199333,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "1/2 -> 7/12: {\\"n\\":88.21301072199333,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "1/6 -> 1/4: {\\"n\\":69.05266877519557,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "1/4 -> 1/3: {\\"n\\":69.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "1/4 -> 1/3: {\\"n\\":72.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "5/12 -> 1/2: {\\"n\\":72.20001184806131,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "1/2 -> 7/12: {\\"n\\":72.25301072199335,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "1/2 -> 7/12: {\\"n\\":88.25301072199335,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "1/12 -> 1/6: {\\"n\\":93.00057728554401,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "1/12 -> 1/6: {\\"n\\":93.04057728554402,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "1/4 -> 1/3: {\\"n\\":69.01266877519555,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "1/3 -> 5/12: {\\"n\\":69.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "1/3 -> 5/12: {\\"n\\":72.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "1/2 -> 7/12: {\\"n\\":72.16001184806132,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "7/12 -> 2/3: {\\"n\\":72.21301072199333,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "7/12 -> 2/3: {\\"n\\":88.21301072199333,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "1/4 -> 1/3: {\\"n\\":69.05266877519557,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "1/3 -> 5/12: {\\"n\\":69.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "1/3 -> 5/12: {\\"n\\":72.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "1/2 -> 7/12: {\\"n\\":72.20001184806131,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "7/12 -> 2/3: {\\"n\\":72.25301072199335,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "7/12 -> 2/3: {\\"n\\":88.25301072199335,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "0/1 -> 1/12: {\\"n\\":72.0468455057745,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "0/1 -> 1/12: {\\"n\\":93.0468455057745,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "1/6 -> 1/4: {\\"n\\":93.00057728554401,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "0/1 -> 1/12: {\\"n\\":72.0868455057745,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "0/1 -> 1/12: {\\"n\\":93.0868455057745,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "1/6 -> 1/4: {\\"n\\":93.04057728554402,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "1/3 -> 5/12: {\\"n\\":69.01266877519555,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "5/12 -> 1/2: {\\"n\\":69.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "5/12 -> 1/2: {\\"n\\":72.04676036055696,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "7/12 -> 2/3: {\\"n\\":72.16001184806132,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "1/3 -> 5/12: {\\"n\\":69.05266877519557,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "5/12 -> 1/2: {\\"n\\":69.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "5/12 -> 1/2: {\\"n\\":72.08676036055695,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "7/12 -> 2/3: {\\"n\\":72.20001184806131,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "2/3 -> 3/4: {\\"n\\":88.25919484626601,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "2/3 -> 3/4: {\\"n\\":88.29919484626603,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.075}",
-  "3/4 -> 5/6: {\\"n\\":88.25919484626601,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "3/4 -> 5/6: {\\"n\\":88.29919484626603,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.049999999999999996}",
-  "2/3 -> 3/4: {\\"n\\":72.21301072199333,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "2/3 -> 3/4: {\\"n\\":88.21301072199333,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "5/6 -> 11/12: {\\"n\\":88.25919484626601,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "2/3 -> 3/4: {\\"n\\":72.25301072199335,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "2/3 -> 3/4: {\\"n\\":88.25301072199335,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-  "5/6 -> 11/12: {\\"n\\":88.29919484626603,\\"decay\\":0.1,\\"sustain\\":0,\\"s\\":\\"triangle\\",\\"gain\\":0.0375}",
-]
-`;
-
-exports[`renders shared tunes > shared tune 309 https://strudel.cc/?ctHqwq-97t6X 1`] = `
-[
-  "0/1 -> 1/2: {\\"s\\":\\"bd\\",\\"delay\\":0.5,\\"delaytime\\":0.33,\\"delayfeedback\\":0.6,\\"speed\\":-1}",
-  "1/2 -> 1/1: {\\"s\\":\\"sd\\",\\"delay\\":0.5,\\"delaytime\\":0.33,\\"delayfeedback\\":0.6,\\"speed\\":-1}",
-  "0/1 -> 1/2: {\\"s\\":\\"hh\\",\\"delay\\":0.8,\\"delaytime\\":0.08,\\"delayfeedback\\":0.7,\\"orbit\\":2,\\"speed\\":-1}",
-  "1/2 -> 1/1: {\\"s\\":\\"hh\\",\\"delay\\":0.8,\\"delaytime\\":0.08,\\"delayfeedback\\":0.7,\\"orbit\\":2,\\"speed\\":-1}",
-]
-`;
diff --git a/test/runtime.mjs b/test/runtime.mjs
index f14e18e2..18d4a29e 100644
--- a/test/runtime.mjs
+++ b/test/runtime.mjs
@@ -122,6 +122,25 @@ strudel.Pattern.prototype.midi = function () {
   return this;
 };
 
+strudel.Pattern.prototype._scope = function () {
+  return this;
+};
+strudel.Pattern.prototype._spiral = function () {
+  return this;
+};
+strudel.Pattern.prototype._pitchwheel = function () {
+  return this;
+};
+strudel.Pattern.prototype._pianoroll = function () {
+  return this;
+};
+strudel.Pattern.prototype._spectrum = function () {
+  return this;
+};
+strudel.Pattern.prototype.markcss = function () {
+  return this;
+};
+
 const uiHelpersMocked = {
   backgroundImage: id,
 };
@@ -178,6 +197,7 @@ evalScope(
   },
 );
 
+// TBD: use transpiler to support labeled statements
 export const queryCode = async (code, cycles = 1) => {
   const { pattern } = await evaluate(code);
   const haps = pattern.sortHapsByPart().queryArc(0, cycles);
diff --git a/undocumented.json b/undocumented.json
index 63f5d36b..8a38f205 100644
--- a/undocumented.json
+++ b/undocumented.json
@@ -649,7 +649,7 @@
   "/packages/webaudio/webaudio.mjs": [
     "webaudioOutputTrigger",
     "webaudioOutput",
-    "webaudioScheduler"
+    "webaudioRepl"
   ],
   "/packages/webaudio/scope.mjs": [
     "drawTimeScope",
diff --git a/vitest.config.ts b/vitest.config.ts
index b6d01f21..026f0b7c 100644
--- a/vitest.config.ts
+++ b/vitest.config.ts
@@ -3,11 +3,6 @@ import { configDefaults, defineConfig } from 'vitest/config';
 /// 
 export default defineConfig({
   test: {
-    // ...
-    deps: {
-      registerNodeLoader: true,
-    },
-    threads: false,
     reporters: 'verbose',
     isolate: false,
     silent: true,
diff --git a/website/.astro/settings.json b/website/.astro/settings.json
deleted file mode 100644
index bf82959b..00000000
--- a/website/.astro/settings.json
+++ /dev/null
@@ -1,5 +0,0 @@
-{
-	"devToolbar": {
-		"enabled": false
-	}
-}
\ No newline at end of file
diff --git a/website/.astro/types.d.ts b/website/.astro/types.d.ts
deleted file mode 100644
index f091daa1..00000000
--- a/website/.astro/types.d.ts
+++ /dev/null
@@ -1,290 +0,0 @@
-declare module 'astro:content' {
-	interface Render {
-		'.mdx': Promise<{
-			Content: import('astro').MarkdownInstance<{}>['Content'];
-			headings: import('astro').MarkdownHeading[];
-			remarkPluginFrontmatter: Record;
-		}>;
-	}
-}
-
-declare module 'astro:content' {
-	interface Render {
-		'.md': Promise<{
-			Content: import('astro').MarkdownInstance<{}>['Content'];
-			headings: import('astro').MarkdownHeading[];
-			remarkPluginFrontmatter: Record;
-		}>;
-	}
-}
-
-declare module 'astro:content' {
-	export { z } from 'astro/zod';
-
-	type Flatten = T extends { [K: string]: infer U } ? U : never;
-
-	export type CollectionKey = keyof AnyEntryMap;
-	export type CollectionEntry = Flatten;
-
-	export type ContentCollectionKey = keyof ContentEntryMap;
-	export type DataCollectionKey = keyof DataEntryMap;
-
-	// This needs to be in sync with ImageMetadata
-	export type ImageFunction = () => import('astro/zod').ZodObject<{
-		src: import('astro/zod').ZodString;
-		width: import('astro/zod').ZodNumber;
-		height: import('astro/zod').ZodNumber;
-		format: import('astro/zod').ZodUnion<
-			[
-				import('astro/zod').ZodLiteral<'png'>,
-				import('astro/zod').ZodLiteral<'jpg'>,
-				import('astro/zod').ZodLiteral<'jpeg'>,
-				import('astro/zod').ZodLiteral<'tiff'>,
-				import('astro/zod').ZodLiteral<'webp'>,
-				import('astro/zod').ZodLiteral<'gif'>,
-				import('astro/zod').ZodLiteral<'svg'>,
-				import('astro/zod').ZodLiteral<'avif'>,
-			]
-		>;
-	}>;
-
-	type BaseSchemaWithoutEffects =
-		| import('astro/zod').AnyZodObject
-		| import('astro/zod').ZodUnion<[BaseSchemaWithoutEffects, ...BaseSchemaWithoutEffects[]]>
-		| import('astro/zod').ZodDiscriminatedUnion
-		| import('astro/zod').ZodIntersection;
-
-	type BaseSchema =
-		| BaseSchemaWithoutEffects
-		| import('astro/zod').ZodEffects;
-
-	export type SchemaContext = { image: ImageFunction };
-
-	type DataCollectionConfig = {
-		type: 'data';
-		schema?: S | ((context: SchemaContext) => S);
-	};
-
-	type ContentCollectionConfig = {
-		type?: 'content';
-		schema?: S | ((context: SchemaContext) => S);
-	};
-
-	type CollectionConfig = ContentCollectionConfig | DataCollectionConfig;
-
-	export function defineCollection(
-		input: CollectionConfig
-	): CollectionConfig;
-
-	type AllValuesOf = T extends any ? T[keyof T] : never;
-	type ValidContentEntrySlug = AllValuesOf<
-		ContentEntryMap[C]
-	>['slug'];
-
-	export function getEntryBySlug<
-		C extends keyof ContentEntryMap,
-		E extends ValidContentEntrySlug | (string & {}),
-	>(
-		collection: C,
-		// Note that this has to accept a regular string too, for SSR
-		entrySlug: E
-	): E extends ValidContentEntrySlug
-		? Promise>
-		: Promise | undefined>;
-
-	export function getDataEntryById(
-		collection: C,
-		entryId: E
-	): Promise>;
-
-	export function getCollection>(
-		collection: C,
-		filter?: (entry: CollectionEntry) => entry is E
-	): Promise;
-	export function getCollection(
-		collection: C,
-		filter?: (entry: CollectionEntry) => unknown
-	): Promise[]>;
-
-	export function getEntry<
-		C extends keyof ContentEntryMap,
-		E extends ValidContentEntrySlug | (string & {}),
-	>(entry: {
-		collection: C;
-		slug: E;
-	}): E extends ValidContentEntrySlug
-		? Promise>
-		: Promise | undefined>;
-	export function getEntry<
-		C extends keyof DataEntryMap,
-		E extends keyof DataEntryMap[C] | (string & {}),
-	>(entry: {
-		collection: C;
-		id: E;
-	}): E extends keyof DataEntryMap[C]
-		? Promise
-		: Promise | undefined>;
-	export function getEntry<
-		C extends keyof ContentEntryMap,
-		E extends ValidContentEntrySlug | (string & {}),
-	>(
-		collection: C,
-		slug: E
-	): E extends ValidContentEntrySlug
-		? Promise>
-		: Promise | undefined>;
-	export function getEntry<
-		C extends keyof DataEntryMap,
-		E extends keyof DataEntryMap[C] | (string & {}),
-	>(
-		collection: C,
-		id: E
-	): E extends keyof DataEntryMap[C]
-		? Promise
-		: Promise | undefined>;
-
-	/** Resolve an array of entry references from the same collection */
-	export function getEntries(
-		entries: {
-			collection: C;
-			slug: ValidContentEntrySlug;
-		}[]
-	): Promise[]>;
-	export function getEntries(
-		entries: {
-			collection: C;
-			id: keyof DataEntryMap[C];
-		}[]
-	): Promise[]>;
-
-	export function reference(
-		collection: C
-	): import('astro/zod').ZodEffects<
-		import('astro/zod').ZodString,
-		C extends keyof ContentEntryMap
-			? {
-					collection: C;
-					slug: ValidContentEntrySlug;
-				}
-			: {
-					collection: C;
-					id: keyof DataEntryMap[C];
-				}
-	>;
-	// Allow generic `string` to avoid excessive type errors in the config
-	// if `dev` is not running to update as you edit.
-	// Invalid collection names will be caught at build time.
-	export function reference(
-		collection: C
-	): import('astro/zod').ZodEffects;
-
-	type ReturnTypeOrOriginal = T extends (...args: any[]) => infer R ? R : T;
-	type InferEntrySchema = import('astro/zod').infer<
-		ReturnTypeOrOriginal['schema']>
-	>;
-
-	type ContentEntryMap = {
-		"blog": {
-"release-0.0.2-schwindlig.mdx": {
-	id: "release-0.0.2-schwindlig.mdx";
-  slug: "release-002-schwindlig";
-  body: string;
-  collection: "blog";
-  data: InferEntrySchema<"blog">
-} & { render(): Render[".mdx"] };
-"release-0.0.2.1-stuermisch.mdx": {
-	id: "release-0.0.2.1-stuermisch.mdx";
-  slug: "release-0021-stuermisch";
-  body: string;
-  collection: "blog";
-  data: InferEntrySchema<"blog">
-} & { render(): Render[".mdx"] };
-"release-0.0.3-maelstrom.mdx": {
-	id: "release-0.0.3-maelstrom.mdx";
-  slug: "release-003-maelstrom";
-  body: string;
-  collection: "blog";
-  data: InferEntrySchema<"blog">
-} & { render(): Render[".mdx"] };
-"release-0.0.4-gischt.mdx": {
-	id: "release-0.0.4-gischt.mdx";
-  slug: "release-004-gischt";
-  body: string;
-  collection: "blog";
-  data: InferEntrySchema<"blog">
-} & { render(): Render[".mdx"] };
-"release-0.3.0-donauwelle.mdx": {
-	id: "release-0.3.0-donauwelle.mdx";
-  slug: "release-030-donauwelle";
-  body: string;
-  collection: "blog";
-  data: InferEntrySchema<"blog">
-} & { render(): Render[".mdx"] };
-"release-0.4.0-brandung.mdx": {
-	id: "release-0.4.0-brandung.mdx";
-  slug: "release-040-brandung";
-  body: string;
-  collection: "blog";
-  data: InferEntrySchema<"blog">
-} & { render(): Render[".mdx"] };
-"release-0.5.0-wirbel.mdx": {
-	id: "release-0.5.0-wirbel.mdx";
-  slug: "release-050-wirbel";
-  body: string;
-  collection: "blog";
-  data: InferEntrySchema<"blog">
-} & { render(): Render[".mdx"] };
-"release-0.6.0-zimtschnecke.mdx": {
-	id: "release-0.6.0-zimtschnecke.mdx";
-  slug: "release-060-zimtschnecke";
-  body: string;
-  collection: "blog";
-  data: InferEntrySchema<"blog">
-} & { render(): Render[".mdx"] };
-"release-0.7.0-zuckerguss.mdx": {
-	id: "release-0.7.0-zuckerguss.mdx";
-  slug: "release-070-zuckerguss";
-  body: string;
-  collection: "blog";
-  data: InferEntrySchema<"blog">
-} & { render(): Render[".mdx"] };
-"release-0.8.0-himbeermuffin.mdx": {
-	id: "release-0.8.0-himbeermuffin.mdx";
-  slug: "release-080-himbeermuffin";
-  body: string;
-  collection: "blog";
-  data: InferEntrySchema<"blog">
-} & { render(): Render[".mdx"] };
-"release-0.9.0-bananenbrot.mdx": {
-	id: "release-0.9.0-bananenbrot.mdx";
-  slug: "release-090-bananenbrot";
-  body: string;
-  collection: "blog";
-  data: InferEntrySchema<"blog">
-} & { render(): Render[".mdx"] };
-"release-1.0.0-geburtstagskuchen.mdx": {
-	id: "release-1.0.0-geburtstagskuchen.mdx";
-  slug: "release-100-geburtstagskuchen";
-  body: string;
-  collection: "blog";
-  data: InferEntrySchema<"blog">
-} & { render(): Render[".mdx"] };
-"year-2.mdx": {
-	id: "year-2.mdx";
-  slug: "year-2";
-  body: string;
-  collection: "blog";
-  data: InferEntrySchema<"blog">
-} & { render(): Render[".mdx"] };
-};
-
-	};
-
-	type DataEntryMap = {
-		
-	};
-
-	type AnyEntryMap = ContentEntryMap & DataEntryMap;
-
-	type ContentConfig = typeof import("../src/content/config");
-}
diff --git a/website/.gitignore b/website/.gitignore
index 02f6e50b..199afe53 100644
--- a/website/.gitignore
+++ b/website/.gitignore
@@ -1,3 +1,4 @@
+.astro
 # build output
 dist/
 
@@ -17,3 +18,6 @@ pnpm-debug.log*
 
 # macOS-specific files
 .DS_Store
+
+public/tree-sitter.wasm
+public/tree-sitter-haskell.wasm
\ No newline at end of file
diff --git a/website/package.json b/website/package.json
index bf56d983..5b6c462a 100644
--- a/website/package.json
+++ b/website/package.json
@@ -9,7 +9,8 @@
     "check": "astro check && tsc",
     "build": "astro build",
     "preview": "astro preview --port 3009 --host 0.0.0.0",
-    "astro": "astro"
+    "astro": "astro",
+    "postinstall": "cp node_modules/hs2js/dist/tree-sitter.wasm public && cp node_modules/hs2js/dist/tree-sitter-haskell.wasm public"
   },
   "dependencies": {
     "@algolia/client-search": "^4.22.0",
@@ -32,6 +33,7 @@
     "@strudel/hydra": "workspace:*",
     "@strudel/midi": "workspace:*",
     "@strudel/mini": "workspace:*",
+    "@strudel/mqtt": "workspace:*",
     "@strudel/osc": "workspace:*",
     "@strudel/serial": "workspace:*",
     "@strudel/soundfonts": "workspace:*",
@@ -39,6 +41,7 @@
     "@strudel/transpiler": "workspace:*",
     "@strudel/webaudio": "workspace:*",
     "@strudel/xen": "workspace:*",
+    "@strudel/tidal": "workspace:*",
     "@supabase/supabase-js": "^2.39.1",
     "@tailwindcss/forms": "^0.5.7",
     "@tailwindcss/typography": "^0.5.10",
@@ -49,6 +52,7 @@
     "astro": "^4.0.8",
     "claviature": "^0.1.0",
     "date-fns": "^3.2.0",
+    "hs2js": "0.0.8",
     "nanoid": "^5.0.4",
     "nanostores": "^0.9.5",
     "react": "^18.2.0",
diff --git a/website/src/components/Header/Header.astro b/website/src/components/Header/Header.astro
index cbc91ca0..e9626677 100644
--- a/website/src/components/Header/Header.astro
+++ b/website/src/components/Header/Header.astro
@@ -26,15 +26,15 @@ const baseNoTrailing = BASE_URL.endsWith('/') ? BASE_URL.slice(0, -1) : BASE_URL
   title="Top Navigation"
 >
   
   {/* KNOWN_LANGUAGE_CODES.length > 1 &&  */}
   
diff --git a/website/src/components/Oven/Oven.jsx b/website/src/components/Oven/Oven.jsx index a4199b5e..eb3c8692 100644 --- a/website/src/components/Oven/Oven.jsx +++ b/website/src/components/Oven/Oven.jsx @@ -1,7 +1,7 @@ import { useState, useEffect } from 'react'; import { loadFeaturedPatterns, loadPublicPatterns } from '@src/user_pattern_utils.mjs'; import { MiniRepl } from '@src/docs/MiniRepl'; -import { PatternLabel } from '@src/repl/panel/PatternsTab'; +import { PatternLabel } from '@src/repl/components/panel/PatternsTab'; function PatternList({ patterns }) { return ( diff --git a/website/src/components/Udels/UdelFrame.jsx b/website/src/components/Udels/UdelFrame.jsx new file mode 100644 index 00000000..8bbbe14e --- /dev/null +++ b/website/src/components/Udels/UdelFrame.jsx @@ -0,0 +1,32 @@ +import { useRef } from 'react'; + +export function UdelFrame({ onEvaluate, hash, instance }) { + const ref = useRef(); + window.addEventListener('message', (message) => { + const childWindow = ref?.current?.contentWindow; + if (message == null || message.source !== childWindow) { + return; // Skip message in this event listener + } + onEvaluate(message.data); + }); + + const url = new URL(window.location.origin); + url.hash = hash; + url.searchParams.append('instance', instance); + const source = url.toString(); + + return ( + + ); +} diff --git a/website/src/components/Udels/Udels.jsx b/website/src/components/Udels/Udels.jsx new file mode 100644 index 00000000..4a5f404f --- /dev/null +++ b/website/src/components/Udels/Udels.jsx @@ -0,0 +1,72 @@ +import { code2hash } from '@strudel/core'; + +import { UdelFrame } from './UdelFrame'; +import { useState } from 'react'; +import UdelsHeader from './UdelsHeader'; + +const defaultHash = 'c3RhY2soCiAgCik%3D'; + +const getHashesFromUrl = () => { + return window.location.hash?.slice(1).split(','); +}; +const updateURLHashes = (hashes) => { + const newHash = '#' + hashes.join(','); + window.location.hash = newHash; +}; +export function Udels() { + const hashes = getHashesFromUrl(); + + const [numWindows, setNumWindows] = useState(hashes?.length ?? 1); + const numWindowsOnChange = (num) => { + setNumWindows(num); + const hashes = getHashesFromUrl(); + const newHashes = []; + for (let i = 0; i < num; i++) { + newHashes[i] = hashes[i] ?? defaultHash; + } + updateURLHashes(newHashes); + }; + + const onEvaluate = (key, code) => { + const hashes = getHashesFromUrl(); + hashes[key] = code2hash(code); + + updateURLHashes(hashes); + }; + + return ( +
+ +
+ {hashes.map((hash, key) => { + return ( + { + onEvaluate(key, code); + }} + hash={hash} + key={key} + /> + ); + })} +
+
+ ); +} diff --git a/website/src/components/Udels/UdelsEditor.jsx b/website/src/components/Udels/UdelsEditor.jsx new file mode 100644 index 00000000..fe7a1ae4 --- /dev/null +++ b/website/src/components/Udels/UdelsEditor.jsx @@ -0,0 +1,26 @@ +import Loader from '@src/repl/components/Loader'; +import { HorizontalPanel } from '@src/repl/components/panel/Panel'; +import { Code } from '@src/repl/components/Code'; +import BigPlayButton from '@src/repl/components/BigPlayButton'; +import UserFacingErrorMessage from '@src/repl/components/UserFacingErrorMessage'; + +// type Props = { +// context: replcontext, +// } + +export default function UdelsEditor(Props) { + const { context } = Props; + const { containerRef, editorRef, error, init, pending, started, handleTogglePlay } = context; + + return ( +
+ + +
+ +
+ + +
+ ); +} diff --git a/website/src/components/Udels/UdelsHeader.jsx b/website/src/components/Udels/UdelsHeader.jsx new file mode 100644 index 00000000..d56f3a1d --- /dev/null +++ b/website/src/components/Udels/UdelsHeader.jsx @@ -0,0 +1,20 @@ +import NumberInput from '@src/repl/components/NumberInput'; + +export default function UdelsHeader(Props) { + const { numWindows, setNumWindows } = Props; + + return ( + + ); +} diff --git a/website/src/config.ts b/website/src/config.ts index f85d60d8..a404f542 100644 --- a/website/src/config.ts +++ b/website/src/config.ts @@ -78,6 +78,7 @@ export const SIDEBAR: Sidebar = { More: [ { text: 'Recipes', link: 'recipes/recipes' }, { text: 'Mini-Notation', link: 'learn/mini-notation' }, + { text: 'Visual Feedback', link: 'learn/visual-feedback' }, { text: 'Offline', link: 'learn/pwa' }, { text: 'Patterns', link: 'technical-manual/patterns' }, { text: 'Music metadata', link: 'learn/metadata' }, diff --git a/website/src/content/blog/release-0.0.2-schwindlig.mdx b/website/src/content/blog/release-0.0.2-schwindlig.mdx index 49e5319a..cf4bc19d 100644 --- a/website/src/content/blog/release-0.0.2-schwindlig.mdx +++ b/website/src/content/blog/release-0.0.2-schwindlig.mdx @@ -26,7 +26,7 @@ author: froos - fix: 💄 Enhance visualisation of the Tutorial on mobile by @puria in https://github.com/tidalcycles/strudel/pull/19 - Stateful queries and events (WIP) by @yaxu in https://github.com/tidalcycles/strudel/pull/14 - Fix resolveState by @yaxu in https://github.com/tidalcycles/strudel/pull/22 -- added \_asNumber + interprete numbers as midi by @felixroos in https://github.com/tidalcycles/strudel/pull/21 +- added \_asNumber + interpret numbers as midi by @felixroos in https://github.com/tidalcycles/strudel/pull/21 - Update package.json by @ChiakiUehira in https://github.com/tidalcycles/strudel/pull/23 - packaging by @felixroos in https://github.com/tidalcycles/strudel/pull/24 diff --git a/website/src/content/blog/release-0.6.0-zimtschnecke.mdx b/website/src/content/blog/release-0.6.0-zimtschnecke.mdx index 80dbc145..2736974b 100644 --- a/website/src/content/blog/release-0.6.0-zimtschnecke.mdx +++ b/website/src/content/blog/release-0.6.0-zimtschnecke.mdx @@ -28,7 +28,7 @@ author: froos - support freq in pianoroll by @felixroos in https://github.com/tidalcycles/strudel/pull/308 - ICLC2023 paper WIP by @yaxu in https://github.com/tidalcycles/strudel/pull/306 -- fix: copy share link to clipboard was broken for some browers by @felixroos in https://github.com/tidalcycles/strudel/pull/311 +- fix: copy share link to clipboard was broken for some browsers by @felixroos in https://github.com/tidalcycles/strudel/pull/311 - Jsdoc component by @felixroos in https://github.com/tidalcycles/strudel/pull/312 - object support for .scale by @felixroos in https://github.com/tidalcycles/strudel/pull/307 - Astro build by @felixroos in https://github.com/tidalcycles/strudel/pull/315 diff --git a/website/src/content/blog/release-1.0.0-geburtstagskuchen.mdx b/website/src/content/blog/release-1.0.0-geburtstagskuchen.mdx index 70176ad9..5784fe52 100644 --- a/website/src/content/blog/release-1.0.0-geburtstagskuchen.mdx +++ b/website/src/content/blog/release-1.0.0-geburtstagskuchen.mdx @@ -138,7 +138,7 @@ Plenty of things have been added to the docs, including a [showcase of what peop - Export patterns + ui tweaks by @felixroos in https://github.com/tidalcycles/strudel/pull/855 - Pattern organization by @felixroos in https://github.com/tidalcycles/strudel/pull/858 - Sound Import from local file system by @daslyfe in https://github.com/tidalcycles/strudel/pull/839 -- bugfix: suspend and close exisiting audio context when changing interface by @daslyfe in https://github.com/tidalcycles/strudel/pull/882 +- bugfix: suspend and close existing audio context when changing interface by @daslyfe in https://github.com/tidalcycles/strudel/pull/882 - add root mode for voicings by @felixroos in https://github.com/tidalcycles/strudel/pull/887 - scales can now be anchored by @felixroos in https://github.com/tidalcycles/strudel/pull/888 - add dough function for raw dsp by @felixroos in https://github.com/tidalcycles/strudel/pull/707 (experimental) @@ -195,7 +195,7 @@ Plenty of things have been added to the docs, including a [showcase of what peop - Update tauri.yml workflow file by @vasilymilovidov in https://github.com/tidalcycles/strudel/pull/705 - vite-vanilla-repl readme fix by @felixroos in https://github.com/tidalcycles/strudel/pull/737 - completely revert config mess by @felixroos in https://github.com/tidalcycles/strudel/pull/745 -- hopefully fix trainling slashes bug by @felixroos in https://github.com/tidalcycles/strudel/pull/753 +- hopefully fix trailing slashes bug by @felixroos in https://github.com/tidalcycles/strudel/pull/753 - Update vite pwa by @felixroos in https://github.com/tidalcycles/strudel/pull/772 - Update to Astro 3 by @felixroos in https://github.com/tidalcycles/strudel/pull/775 - support multiple named serial connections, change default baudrate by @yaxu in https://github.com/tidalcycles/strudel/pull/551 diff --git a/website/src/docs/MiniRepl.jsx b/website/src/docs/MiniRepl.jsx index cadebcb3..0f3d3ce1 100644 --- a/website/src/docs/MiniRepl.jsx +++ b/website/src/docs/MiniRepl.jsx @@ -1,20 +1,20 @@ import { useState, useRef, useCallback, useMemo, useEffect } from 'react'; import { Icon } from './Icon'; import { silence, noteToMidi, _mod } from '@strudel/core'; -import { getPunchcardPainter } from '@strudel/draw'; +import { getDrawContext, getPunchcardPainter } from '@strudel/draw'; import { transpiler } from '@strudel/transpiler'; import { getAudioContext, webaudioOutput, initAudioOnFirstClick } from '@strudel/webaudio'; import { StrudelMirror } from '@strudel/codemirror'; import { prebake } from '../repl/prebake.mjs'; -import { loadModules } from '../repl/util.mjs'; +import { loadModules, setVersionDefaultsFrom } from '../repl/util.mjs'; import Claviature from '@components/Claviature'; import useClient from '@src/useClient.mjs'; -let prebaked, modulesLoading, audioLoading; +let prebaked, modulesLoading, audioReady; if (typeof window !== 'undefined') { prebaked = prebake(); modulesLoading = loadModules(); - audioLoading = initAudioOnFirstClick(); + audioReady = initAudioOnFirstClick(); } export function MiniRepl({ @@ -28,24 +28,29 @@ export function MiniRepl({ claviature, claviatureLabels, maxHeight, + autodraw, + drawTime, }) { const code = tunes ? tunes[0] : tune; const id = useMemo(() => s4(), []); - const canvasId = useMemo(() => `canvas-${id}`, [id]); - const shouldDraw = !!punchcard || !!claviature; const shouldShowCanvas = !!punchcard; - const drawTime = punchcard ? [0, 4] : [0, 0]; + const canvasId = shouldShowCanvas ? useMemo(() => `canvas-${id}`, [id]) : null; + autodraw = !!punchcard || !!claviature || !!autodraw; + drawTime = (drawTime ?? punchcard) ? [0, 4] : [-2, 2]; + if (claviature) { + drawTime = [0, 0]; + } const [activeNotes, setActiveNotes] = useState([]); - const init = useCallback(({ code, shouldDraw }) => { - const drawContext = shouldDraw ? document.querySelector('#' + canvasId)?.getContext('2d') : null; + const init = useCallback(({ code, autodraw }) => { + const drawContext = canvasId ? document.querySelector('#' + canvasId)?.getContext('2d') : getDrawContext(); const editor = new StrudelMirror({ id, defaultOutput: webaudioOutput, getTime: () => getAudioContext().currentTime, transpiler, - autodraw: !!shouldDraw, + autodraw, root: containerRef.current, initialCode: '// LOADING', pattern: silence, @@ -56,7 +61,7 @@ export function MiniRepl({ pat = pat.onTrigger(onTrigger, false); } if (claviature) { - editor?.painters.push((ctx, time, haps, drawTime) => { + pat = pat.onPaint((ctx, time, haps, drawTime) => { const active = haps .map((hap) => hap.value.note) .filter(Boolean) @@ -65,14 +70,21 @@ export function MiniRepl({ }); } if (punchcard) { - editor?.painters.push(getPunchcardPainter({ labels: !!punchcardLabels })); + pat = pat.punchcard({ labels: !!punchcardLabels }); } return pat; }, - prebake: async () => Promise.all([modulesLoading, prebaked, audioLoading]), + prebake: async () => Promise.all([modulesLoading, prebaked]), onUpdateState: (state) => { setReplState({ ...state }); }, + onToggle: (playing) => { + if (!playing) { + // clearHydra(); // TBD: doesn't work with multiple MiniRepl's on a page + } + }, + beforeStart: () => audioReady, + afterEval: ({ code }) => setVersionDefaultsFrom(code), }); // init settings editor.setCode(code); @@ -107,6 +119,7 @@ export function MiniRepl({ 'cursor-pointer w-16 flex items-center justify-center p-1 border-r border-lineHighlight text-foreground bg-lineHighlight hover:bg-background', started ? 'animate-pulse' : '', )} + aria-label={started ? 'stop' : 'play'} onClick={() => editorRef.current?.toggle()} > @@ -116,6 +129,7 @@ export function MiniRepl({ 'w-16 flex items-center justify-center p-1 text-foreground border-lineHighlight bg-lineHighlight', isDirty ? 'text-foreground hover:bg-background cursor-pointer' : 'opacity-50 cursor-not-allowed', )} + aria-label="update" onClick={() => editorRef.current?.evaluate()} > @@ -127,6 +141,7 @@ export function MiniRepl({ className={ 'cursor-pointer w-16 flex items-center justify-center p-1 border-r border-lineHighlight text-foreground bg-lineHighlight hover:bg-background' } + aria-label="previous example" onClick={() => changeTune(tuneIndex - 1)} >
@@ -137,6 +152,7 @@ export function MiniRepl({ className={ 'cursor-pointer w-16 flex items-center justify-center p-1 border-r border-lineHighlight text-foreground bg-lineHighlight hover:bg-background' } + aria-label="next example" onClick={() => changeTune(tuneIndex + 1)} > @@ -150,7 +166,7 @@ export function MiniRepl({ ref={(el) => { if (!editorRef.current) { containerRef.current = el; - init({ code, shouldDraw }); + init({ code, autodraw }); } }} >
diff --git a/website/src/examples.mjs b/website/src/examples.mjs index 61132dfa..83c77a9c 100644 --- a/website/src/examples.mjs +++ b/website/src/examples.mjs @@ -1,5 +1,6 @@ export const examples = [ `// "coastline" @by eddyflux +// @version 1.0 samples('github:eddyflux/crate') setcps(.75) let chords = chord("/4").dict('ireal') @@ -18,7 +19,7 @@ stack( n("<0!3 1*2>").set(chords).mode("root:g2") .voicing().s("gm_acoustic_bass"), chords.n("[0 <4 3 <2 5>>*2](<3 5>,8)") - .set(x).anchor("D5").voicing() + .anchor("D5").voicing() .segment(4).clip(rand.range(.4,.8)) .room(.75).shape(.3).delay(.25) .fm(sine.range(3,8).slow(8)) @@ -29,6 +30,7 @@ stack( ) .late("[0 .01]*4").late("[0 .01]*2").size(4)`, `// "broken cut 1" @by froos +// @version 1.0 samples('github:tidalcycles/dirt-samples') samples({ @@ -56,6 +58,7 @@ note("[c2 ~](3,8)*2,eb,g,bb,d").s("sawtooth") s("?").delay(".8:.1:.8").room(2).slow(8).cut(2), ).reset("".late(2))`, `// "acidic tooth" @by eddyflux +// @version 1.0 setcps(1) stack( note("[/8](<3 5>,8)") diff --git a/website/src/layouts/MainLayout.astro b/website/src/layouts/MainLayout.astro index 49952a7e..c6f6653c 100644 --- a/website/src/layouts/MainLayout.astro +++ b/website/src/layouts/MainLayout.astro @@ -30,7 +30,7 @@ const githubEditUrl = `${CONFIG.GITHUB_EDIT_URL}/${currentFile}`; - +
diff --git a/website/src/pages/de/workshop/pattern-effects.mdx b/website/src/pages/de/workshop/pattern-effects.mdx index c76c831d..3cf8fee6 100644 --- a/website/src/pages/de/workshop/pattern-effects.mdx +++ b/website/src/pages/de/workshop/pattern-effects.mdx @@ -147,7 +147,7 @@ Probier `ply` mit einem pattern zu automatisieren, z.b. `"<1 2 1 3>"` .off(1/8, x=>x.add(4)) //.off(1/4, x=>x.add(7)) ).scale("/4") -.s("triangle").room(.5).ds(".1:0").delay(.5)`} +.s("triangle").room(.5).dec(.1).delay(.5)`} punchcard /> diff --git a/website/src/pages/index.astro b/website/src/pages/index.astro index 760cf448..29cf2fad 100644 --- a/website/src/pages/index.astro +++ b/website/src/pages/index.astro @@ -3,12 +3,12 @@ import HeadCommon from '../components/HeadCommon.astro'; import { Repl } from '../repl/Repl'; --- - + Strudel REPL - + diff --git a/website/src/pages/learn/effects.mdx b/website/src/pages/learn/effects.mdx index 03ef6ef3..39f52e9f 100644 --- a/website/src/pages/learn/effects.mdx +++ b/website/src/pages/learn/effects.mdx @@ -94,7 +94,7 @@ Each filter can receive an additional filter envelope controlling the cutoff val client:idle tune={`note("[c eb g ](3,8,<0 1>)".sub(12)) .s("/64") - .lpf(sine.range(500,3000).slow(16)) + .lpf(sine.range(300,2000).slow(16)) .lpa(0.005) .lpd(perlin.range(.02,.2)) .lps(perlin.range(0,.5).slow(3)) @@ -106,7 +106,7 @@ Each filter can receive an additional filter envelope controlling the cutoff val .juxBy(.5,rev) .sometimes(add(note(12))) .stack(s("bd*2").bank('RolandTR909')) - .gain(.5)`} + .gain(.5).fast(2)`} /> There is one filter envelope for each filter type and thus one set of envelope filter parameters preceded either by `lp`, `hp` or `bp`: diff --git a/website/src/pages/learn/factories.mdx b/website/src/pages/learn/factories.mdx index 0d93fb21..6a2e165b 100644 --- a/website/src/pages/learn/factories.mdx +++ b/website/src/pages/learn/factories.mdx @@ -11,55 +11,43 @@ import { JsDoc } from '../../docs/JsDoc'; The following functions will return a pattern. These are the equivalents used by the Mini Notation: -| function | mini | -| ------------------------------ | ---------------- | -| `cat(x, y)` | `""` | -| `seq(x, y)` | `"x y"` | -| `stack(x, y)` | `"x,y"` | -| `timeCat([3,x],[2,y])` | `"x@3 y@2"` | -| `polymeter([a, b, c], [x, y])` | `"{a b c, x y}"` | -| `polymeterSteps(2, x, y, z)` | `"{x y z}%2"` | -| `silence` | `"~"` | +| function | mini | +| -------------------------------- | ---------------- | +| `cat(x, y)` | `""` | +| `seq(x, y)` | `"x y"` | +| `stack(x, y)` | `"x,y"` | +| `s_cat([3,x],[2,y])` | `"x@3 y@2"` | +| `s_polymeter([a, b, c], [x, y])` | `"{a b c, x y}"` | +| `s_polymeterSteps(2, x, y, z)` | `"{x y z}%2"` | +| `silence` | `"~"` | ## cat -You can also use cat as a chained function like this: - - - ## seq -Or as a chained function: - - - ## stack -As a chained function: +## s_cat - - -## timeCat - - + ## arrange -## polymeter +## s_polymeter - + -## polymeterSteps +## s_polymeterSteps - + ## silence diff --git a/website/src/pages/learn/hydra.mdx b/website/src/pages/learn/hydra.mdx index d7a692dd..2bf5fab4 100644 --- a/website/src/pages/learn/hydra.mdx +++ b/website/src/pages/learn/hydra.mdx @@ -90,11 +90,13 @@ src(s0).kaleid(H("<4 5 6>")) .modulateScale(osc(2,-0.25,1)) .out() // -stack( - s("bd*4,[hh:0:<.5 1>]*8,~ rim").bank("RolandTR909").speed(.9), - note("[>>]*3").s("sawtooth") - .room(.75).sometimes(add(note(12))).clip(.3) - .lpa(.05).lpenv(-4).lpf(2000).lpq(8).ftype('24db') -).fft(4) - .scope({pos:0,smear:.95})`} + +$: s("bd*4,[hh:0:<.5 1>]*8,~ rim").bank("RolandTR909").speed(.9) + +$: note("[>>]\*3").s("sawtooth") + +.room(.75).sometimes(add(note(12))).clip(.3) +.lpa(.05).lpenv(-4).lpf(2000).lpq(8).ftype('24db') + +all(x=>x.fft(4).scope({pos:0,smear:.95}))`} /> diff --git a/website/src/pages/learn/input-output.mdx b/website/src/pages/learn/input-output.mdx index de44b4f9..14e46ba7 100644 --- a/website/src/pages/learn/input-output.mdx +++ b/website/src/pages/learn/input-output.mdx @@ -1,30 +1,27 @@ --- -title: MIDI & OSC +title: MIDI, OSC & MQTT layout: ../../layouts/MainLayout.astro --- import { MiniRepl } from '../../docs/MiniRepl'; import { JsDoc } from '../../docs/JsDoc'; -# MIDI and OSC +# MIDI, OSC and MQTT -The default audio output of Strudel uses the [Web Audio API](https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API). -It is also possible to use Strudel with MIDI and OSC / [SuperDirt](https://github.com/musikinformatik/SuperDirt/) instead. +Normally, Strudel is used to pattern sound, using its own '[web audio](https://developer.mozilla.org/en-US/docs/Web/API/Web_Audio_API)'-based synthesiser called [SuperDough](https://github.com/tidalcycles/strudel/tree/main/packages/superdough). -# MIDI API +It is also possible to pattern other things with Strudel, such as software and hardware synthesisers with MIDI, other software using Open Sound Control/OSC (including the [SuperDirt](https://github.com/musikinformatik/SuperDirt/) synthesiser commonly used with Strudel's sibling [TidalCycles](https://tidalcycles.org/)), or the MQTT 'internet of things' protocol. -Strudel also supports midi via [webmidi](https://npmjs.com/package/webmidi). +# MIDI + +Strudel supports MIDI without any additional software (thanks to [webmidi](https://npmjs.com/package/webmidi)), just by adding methods to your pattern: ## midi(outputName?) Either connect a midi device or use the IAC Driver (Mac) or Midi Through Port (Linux) for internal midi messages. If no outputName is given, it uses the first midi output it finds. -".voicings('lefthand'), "").note() - .midi()`} -/> +").voicing().midi()`} /> In the console, you will see a log of the available MIDI devices as soon as you run the code, e.g. `Midi connected! Using "Midi Through Port-0".` @@ -45,26 +42,26 @@ But you can also control cc messages separately like this: -# SuperDirt API +# OSC/SuperDirt/StrudelDirt -In mainline tidal, the actual sound is generated via [SuperDirt](https://github.com/musikinformatik/SuperDirt/), which runs inside SuperCollider. -Strudel also supports using [SuperDirt](https://github.com/musikinformatik/SuperDirt/) as a backend, although it requires some developer tooling to run. +In TidalCycles, sound is usually generated using [SuperDirt](https://github.com/musikinformatik/SuperDirt/), which runs inside SuperCollider. Strudel also supports using SuperDirt, although it requires installing some additional software. + +There is also [StrudelDirt](https://github.com/daslyfe/StrudelDirt) which is SuperDirt with some optimisations for working with Strudel. (A longer term aim is to merge these optimisations back into mainline SuperDirt) ## Prequisites -Getting [SuperDirt](https://github.com/musikinformatik/SuperDirt/) to work with Strudel, you need to +To get SuperDirt to work with Strudel, you need to 1. install SuperCollider + sc3 plugins, see [Tidal Docs](https://tidalcycles.org/docs/) (Install Tidal) for more info. -2. install [node.js](https://nodejs.org/en/) -3. download [Strudel Repo](https://github.com/tidalcycles/strudel/) (or git clone, if you have git installed) -4. run `pnpm i` in the strudel directory -5. run `pnpm run osc` to start the osc server, which forwards OSC messages from Strudel REPL to SuperCollider +2. install SuperDirt, or the [StrudelDirt](https://github.com/daslyfe/StrudelDirt) fork which is optimised for use with Strudel +3. install [node.js](https://nodejs.org/en/) +4. download [Strudel Repo](https://github.com/tidalcycles/strudel/) (or git clone, if you have git installed) +5. run `pnpm i` in the strudel directory +6. run `pnpm run osc` to start the osc server, which forwards OSC messages from Strudel REPL to SuperCollider Now you're all set! @@ -79,18 +76,80 @@ Now you're all set! If you now hear sound, congratulations! If not, you can get help on the [#strudel channel in the TidalCycles discord](https://discord.com/invite/HGEdXmRkzT). +Note: if you have the 'Audio Engine Target' in settings set to 'OSC', you do not need to add .osc() to the end of your pattern. + ### Pattern.osc ## SuperDirt Params -The following functions can be used with [SuperDirt](https://github.com/musikinformatik/SuperDirt/): - -`s n note freq channel orbit cutoff resonance hcutoff hresonance bandf bandq djf vowel cut begin end loop fadeTime speed unitA gain amp accelerate crush coarse delay lock leslie lrate lsize pan panspan pansplay room size dry shape squiz waveloss attack decay octave detune tremolodepth` - Please refer to [Tidal Docs](https://tidalcycles.org/) for more info.
But can we use Strudel [offline](/learn/pwa)? + +# MQTT + +MQTT is a lightweight network protocol, designed for 'internet of things' devices. For use with strudel, you will +need access to an MQTT server known as a 'broker' configured to accept secure 'websocket' connections. You could +run one yourself (e.g. by running [mosquitto](https://mosquitto.org/)), although getting an SSL certificate that +your web browser will trust might be a bit tricky for those without systems administration experience. +Alternatively, you can use [a public broker](https://www.hivemq.com/mqtt/public-mqtt-broker/). + +Strudel does not yet support receiving messages over MQTT, only sending them. + +## Usage + +The following example shows how to send a pattern to an MQTT broker: + + + +Other software can then receive the messages. For example using the [mosquitto](https://mosquitto.org/) commandline client tools: + +``` +> mosquitto_sub -h mqtt.eclipseprojects.io -p 1883 -t "/strudel-pattern" +hello +world +hello +world +... +``` + +Control patterns will be encoded as JSON, for example: + + + +Will send messages like the following: + +``` +{"s":"sax","speed":2} +{"s":"sax","speed":2} +{"s":"sax","speed":3} +{"s":"sax","speed":2} +... +``` + +Libraries for receiving MQTT are available for many programming languages. diff --git a/website/src/pages/learn/samples.mdx b/website/src/pages/learn/samples.mdx index c2c166b3..44259617 100644 --- a/website/src/pages/learn/samples.mdx +++ b/website/src/pages/learn/samples.mdx @@ -268,11 +268,10 @@ With it, you can enter any sample name(s) to query from [freesound.org](https:// You can also generate artificial voice samples with any text, in multiple languages. @@ -282,10 +281,9 @@ Note that the language code and the gender parameters are optional and default t client:idle tune={`samples('shabda/speech:the_drum,forever') samples('shabda/speech/fr-FR/m:magnifique') -stack( - s("the_drum*2").chop(16).speed(rand.range(0.85,1.1)), - s("forever magnifique").slow(4).late(0.125) -)`} + +$: s("the_drum*2").chop(16).speed(rand.range(0.85,1.1)) +$: s("forever magnifique").slow(4).late(0.125)`} /> # Sampler Effects diff --git a/website/src/pages/learn/signals.mdx b/website/src/pages/learn/signals.mdx index 7c9d69df..527e42be 100644 --- a/website/src/pages/learn/signals.mdx +++ b/website/src/pages/learn/signals.mdx @@ -55,4 +55,12 @@ There is also `saw2`, `sine2`, `cosine2`, `tri2`, `square2` and `rand2` which ha +## mouseX + + + +## mouseY + + + Next up: [Random Modifiers](/learn/random-modifiers) diff --git a/website/src/pages/learn/strudel-vs-tidal.mdx b/website/src/pages/learn/strudel-vs-tidal.mdx index 0c7213c7..40ea188f 100644 --- a/website/src/pages/learn/strudel-vs-tidal.mdx +++ b/website/src/pages/learn/strudel-vs-tidal.mdx @@ -112,29 +112,14 @@ Also, samples are always loaded from a URL rather than from the disk, although [ ## Evaluation The Strudel REPL does not support [block based evaluation](https://github.com/tidalcycles/strudel/issues/34) yet. -You can use the following "workaround" to create multiple patterns that can be turned on and off: +You can use labeled statements and `_` to mute: -``` -let a = note("c a f e") + ## Tempo diff --git a/website/src/pages/learn/synths.mdx b/website/src/pages/learn/synths.mdx index 36385d54..21a9b917 100644 --- a/website/src/pages/learn/synths.mdx +++ b/website/src/pages/learn/synths.mdx @@ -18,7 +18,7 @@ The basic waveforms are `sine`, `sawtooth`, `square` and `triangle`, which can b client:idle tune={`note("c2 >".fast(2)) .sound("") -.scope()`} +._scope()`} /> If you don't set a `sound` but a `note` the default value for `sound` is `triangle`! @@ -28,23 +28,23 @@ If you don't set a `sound` but a `note` the default value for `sound` is `triang You can also use noise as a source by setting the waveform to: `white`, `pink` or `brown`. These are different flavours of noise, here written from hard to soft. -").scope()`} /> +")._scope()`} /> Here's a more musical example of how to use noise for hihats: *8") -.decay(.04).sustain(0).scope()`} +.decay(.04).sustain(0)._scope()`} /> Some amount of pink noise can also be added to any oscillator by using the `noise` paremeter: -").scope()`} /> +")._scope()`} /> You can also use the `crackle` type to play some subtle noise crackles. You can control noise amount by using the `density` parameter: -".slow(2)).scope()`} /> +".slow(2))._scope()`} /> ### Additive Synthesis @@ -55,7 +55,7 @@ To tame the harsh sound of the basic waveforms, we can set the `n` control to li tune={`note("c2 >".fast(2)) .sound("sawtooth") .n("<32 16 8 4>") -.scope()`} +._scope()`} /> When the `n` control is used on a basic waveform, it defines the number of harmonic partials the sound is getting. @@ -65,7 +65,7 @@ You can also set `n` directly in mini notation with `sound`: client:idle tune={`note("c2 >".fast(2)) .sound("sawtooth:<32 16 8 4>") -.scope()`} +._scope()`} /> Note for tidal users: `n` in tidal is synonymous to `note` for synths only. @@ -119,13 +119,14 @@ Any sample preceded by the `wt_` prefix will be loaded as a wavetable. This mean ") .n("<1 2 3 4 5 6 7 8 9 10>/2").room(0.5).size(0.9) .s('wt_flute').velocity(0.25).often(n => n.ply(2)) .release(0.125).decay("<0.1 0.25 0.3 0.4>").sustain(0) -.cutoff(2000).scope({}).cutoff("<1000 2000 4000>").fast(4)`} +.cutoff(2000).cutoff("<1000 2000 4000>").fast(4) +._scope() +`} /> ## ZZFX @@ -159,7 +160,7 @@ It has 20 parameters in total, here is a snippet that uses all: .tremolo(0) // 0-1 lfo volume modulation amount //.duration(.2) // overwrite strudel event duration //.gain(1) // change volume - .scope() // vizualise waveform (not zzfx related) + ._scope() // vizualise waveform (not zzfx related) `} /> diff --git a/website/src/pages/learn/tonal.mdx b/website/src/pages/learn/tonal.mdx index a5a02508..202b8481 100644 --- a/website/src/pages/learn/tonal.mdx +++ b/website/src/pages/learn/tonal.mdx @@ -55,20 +55,6 @@ Transposes notes inside the scale by the number of steps: .note()`} /> -### voicings(range?) - -Turns chord symbols into voicings, using the smoothest voice leading possible: - -".voicings('lefthand'), - "" -).note()`} -/> - -Note: This function might be removed, as `voicing` (without s) is a newer implementation. - ### rootNotes(octave = 2) Turns chord symbols into root notes of chords in given octave. diff --git a/website/src/pages/learn/visual-feedback.mdx b/website/src/pages/learn/visual-feedback.mdx new file mode 100644 index 00000000..35202ca6 --- /dev/null +++ b/website/src/pages/learn/visual-feedback.mdx @@ -0,0 +1,108 @@ +--- +title: Visual Feedback +layout: ../../layouts/MainLayout.astro +--- + +import { MiniRepl } from '../../docs/MiniRepl'; +import { JsDoc } from '../../docs/JsDoc'; + +# Visual Feedback + +There are several function that add visual feedback to your patterns. + +## Mini Notation Highlighting + +When you write mini notation with "double quotes" or \`backticks\`, the active parts of the mini notation will be highlighted: + +*8") +.scale("/4:minor:pentatonic") +.s("supersaw").lpf(300).lpenv("<4 3 2>\*4")`} +/> + +You can change the color as well, even pattern it: + +*8") +.scale("/4:minor:pentatonic") +.s("supersaw").lpf(300).lpenv("<4 3 2>*4") +.color("cyan magenta")`} +/> + +## Global vs Inline Visuals + +The following functions all come with in 2 variants. + +**Without prefix**: renders the visual to the background of the page: + + + +**With `_` prefix**: renders the visual inside the code. Allows for multiple visuals + + + +Here we see the 2 variants for `punchcard`. The same goes for all others below. +To improve readability the following demos will all use the inline variant. + +## Punchcard / Pianoroll + +These 2 functions render a pianoroll style visual. +The only difference between the 2 is that `pianoroll` will render the pattern directly, +while `punchcard` will also take the transformations into account that occur afterwards: + + + +Here, the `color` is still visible in the visual, even if it is applied after `_punchcard`. +On the contrary, the color is not visible when using `_pianoroll`: + + + +import Box from '@components/Box.astro'; + +
+ + + +`punchcard` is less resource intensive because it uses the same data as used for the mini notation highlighting. + + + +The visual can be customized by passing options. Those options are the same for both functions. + +What follows is the API doc of all the options you can pass: + + + +## Spiral + + + +## Scope + + + +## Pitchwheel + + + +## Spectrum + + + +## markcss + + diff --git a/website/src/pages/recipes/recipes.mdx b/website/src/pages/recipes/recipes.mdx index 057743cb..dd195443 100644 --- a/website/src/pages/recipes/recipes.mdx +++ b/website/src/pages/recipes/recipes.mdx @@ -308,7 +308,7 @@ Running through different wavetables can also give interesting variations: ...adding a filter envelope + reverb: @@ -317,6 +317,6 @@ note("c2*8").s("wt_dbass").n(run(8))`} client:visible tune={`samples('github:bubobubobubobubo/dough-waveforms') note("c2*8").s("wt_dbass").n(run(8)) -.lpf(perlin.range(200,2000).slow(8)) -.lpenv(-3).lpa(.1).room(.5)`} +.lpf(perlin.range(100,1000).slow(8)) +.lpenv(-3).lpa(.1).room(.5).fast(2)`} /> diff --git a/website/src/pages/udels/index.astro b/website/src/pages/udels/index.astro new file mode 100644 index 00000000..4ab699e7 --- /dev/null +++ b/website/src/pages/udels/index.astro @@ -0,0 +1,12 @@ +--- +import { Udels } from '../../components/Udels/Udels.jsx'; + + +const { BASE_URL } = import.meta.env; +const baseNoTrailing = BASE_URL.endsWith('/') ? BASE_URL.slice(0, -1) : BASE_URL; +--- + + + + + \ No newline at end of file diff --git a/website/src/pages/workshop/first-effects.mdx b/website/src/pages/workshop/first-effects.mdx index 3450e78f..99e72a13 100644 --- a/website/src/pages/workshop/first-effects.mdx +++ b/website/src/pages/workshop/first-effects.mdx @@ -60,11 +60,10 @@ We will learn how to automate with waves later... @@ -76,31 +75,21 @@ Rhythm is all about dynamics! -**stacks within stacks** - Let's combine all of the above into a little tune: ") -.sound("sawtooth").lpf("200 1000 200 1000"), -note("<[c3,g3,e4] [bb2,f3,d4] [a2,f3,c4] [bb2,g3,eb4]>") -.sound("sawtooth").vowel("") -)`} + tune={`$: sound("hh*8").gain("[.25 1]*4") + +$: sound("bd*4,[~ sd:1]*2") + +$: note("<[c2 c3]*4 [bb1 bb2]*4 [f2 f3]*4 [eb2 eb3]*4>") +.sound("sawtooth").lpf("200 1000 200 1000") + +$: note("<[c3,g3,e4] [bb2,f3,d4] [a2,f3,c4] [bb2,g3,eb4]>") +.sound("sawtooth").vowel("")`} /> - - -Try to identify the individual parts of the stacks, pay attention to where the commas are. -The 3 parts (drums, bassline, chords) are exactly as earlier, just stacked together, separated by comma. - - - **shape the sound with an adsr envelope** ~]]*2") -.sound("gm_electric_guitar_muted"), -sound("").bank("RolandTR707") -).delay(".5")`} + tune={`$: note("[~ [<[d3,a3,f4]!2 [d3,bb3,g4]!2> ~]]*2") + .sound("gm_electric_guitar_muted").delay(.5) + +$: sound("bd rim").bank("RolandTR707").delay(".5")`} /> @@ -199,31 +187,32 @@ Add a delay too! ~]]*2") -.sound("gm_electric_guitar_muted").delay(.5), -sound("").bank("RolandTR707").delay(.5), -n("<4 [3@3 4] [<2 0> ~@16] ~>") + tune={`$: note("[~ [<[d3,a3,f4]!2 [d3,bb3,g4]!2> ~]]*2") +.sound("gm_electric_guitar_muted").delay(.5) + +$: sound("bd rim").bank("RolandTR707").delay(.5) + +$: n("<4 [3@3 4] [<2 0> ~@16] ~>") .scale("D4:minor").sound("gm_accordion:2") -room(2).gain(.5) -)`} +.room(2).gain(.5)`} /> Let's add a bass to make this complete: ~]]*2") -.sound("gm_electric_guitar_muted").delay(.5), -sound("").bank("RolandTR707").delay(.5), -n("<4 [3@3 4] [<2 0> ~@16] ~>") + tune={`$: note("[~ [<[d3,a3,f4]!2 [d3,bb3,g4]!2> ~]]*2") +.sound("gm_electric_guitar_muted").delay(.5) + +$: sound("bd rim").bank("RolandTR707").delay(.5) + +$: n("<4 [3@3 4] [<2 0> ~@16] ~>") .scale("D4:minor").sound("gm_accordion:2") -.room(2).gain(.4), -n("[0 [~ 0] 4 [3 2] [0 ~] [0 ~] <0 2> ~]/2") +.room(2).gain(.4) + +$: n("[0 [~ 0] 4 [3 2] [0 ~] [0 ~] <0 2> ~]/2") .scale("D2:minor") -.sound("sawtooth,triangle").lpf(800) -)`} +.sound("sawtooth,triangle").lpf(800)`} /> @@ -262,11 +251,11 @@ By the way, inside Mini-Notation, `fast` is `*` and `slow` is `/`. ")`} /> -## automation with signals +## modulation with signals Instead of changing values stepwise, we can also control them with signals: - + @@ -290,7 +279,7 @@ What happens if you flip the range values? -We can change the automation speed with slow / fast: +We can change the modulation speed with slow / fast: -The whole automation will now take 8 cycles to repeat. +The whole modulation will now take 8 cycles to repeat. diff --git a/website/src/pages/workshop/first-notes.mdx b/website/src/pages/workshop/first-notes.mdx index 71a21764..f3d74ddc 100644 --- a/website/src/pages/workshop/first-notes.mdx +++ b/website/src/pages/workshop/first-notes.mdx @@ -314,11 +314,11 @@ Let's recap what we've learned in this chapter: New functions: -| Name | Description | Example | -| ----- | ----------------------------------- | --------------------------------------------------------------------------------- | -| note | set pitch as number or letter | | -| scale | interpret `n` as scale degree | | -| stack | play patterns in parallel (read on) | | +| Name | Description | Example | +| ----- | ----------------------------- | --------------------------------------------------------------------------------- | +| note | set pitch as number or letter | | +| scale | interpret `n` as scale degree | | +| $: | play patterns in parallel | | ## Examples @@ -356,25 +356,35 @@ New functions: -It's called `stack` 😙 +You can use `$:` 😙 +## Playing multiple patterns + +If you want to play multiple patterns at the same time, make sure to write `$:` before each: + ") - .sound("gm_synth_bass_1").lpf(800), - n(\`< + tune={`$: note("<[c2 c3]*4 [bb1 bb2]*4 [f2 f3]*4 [eb2 eb3]*4>") + .sound("gm_synth_bass_1").lpf(800) + +$: n(\`< [~ 0] 2 [0 2] [~ 2] [~ 0] 1 [0 1] [~ 1] [~ 0] 3 [0 3] [~ 3] [~ 0] 2 [0 2] [~ 2] >*4\`).scale("C4:minor") - .sound("gm_synth_strings_1"), - sound("bd*4, [~ ]*2, [~ hh]*4") - .bank("RolandTR909") -)`} + .sound("gm_synth_strings_1") + +$: sound("bd*4, [~ ]*2, [~ hh]*4") +.bank("RolandTR909")`} /> + + +Try changing `$` to `_$` to mute a part! + + + This is starting to sound like actual music! We have sounds, we have notes, now the last piece of the puzzle is missing: [effects](/workshop/first-effects) diff --git a/website/src/pages/workshop/pattern-effects.mdx b/website/src/pages/workshop/pattern-effects.mdx index 5afe862c..c9cb7b46 100644 --- a/website/src/pages/workshop/pattern-effects.mdx +++ b/website/src/pages/workshop/pattern-effects.mdx @@ -25,20 +25,16 @@ This is the same as: Let's visualize what happens here: @@ -56,11 +52,9 @@ This is like doing @@ -110,17 +104,15 @@ We can add as often as we like: [~ <4 1>]".add("<0 [0,2,4]>")) + tune={`$: n("0 [2 4] <3 5> [~ <4 1>]".add("<0 [0,2,4]>")) .scale("C5:minor") .sound("gm_xylophone") - .room(.4).delay(.125), - note("c2 [eb3,g3]".add("<0 <1 -1>>")) + .room(.4).delay(.125) +$: note("c2 [eb3,g3]".add("<0 <1 -1>>")) .adsr("[.1 0]:.2:[1 0]") .sound("gm_acoustic_bass") - .room(.5), - n("0 1 [2 3] 2").sound("jazz").jux(rev) -)`} + .room(.5) +$: n("0 1 [2 3] 2").sound("jazz").jux(rev)`} /> **ply** @@ -145,13 +137,17 @@ Try patterning the `ply` function, for example using `"<1 2 1 3>"` .off(1/16, x=>x.add(4)) //.off(1/8, x=>x.add(7)) ).scale("/2") -.s("triangle").room(.5).ds(".1:0").delay(.5)`} +.s("triangle").room(.5).dec(.1)`} punchcard /> -In the notation `x=>x.`, the `x` is the shifted pattern, which where modifying. +In the notation `.off(1/16, x=>x.add(4))`, says: + +- take the original pattern named as `x` +- modify `x` with `.add(4)`, and +- play it offset to the original pattern by `1/16` of a cycle. @@ -161,7 +157,7 @@ off is also useful for modifying other sounds, and can even be nested: client:visible tune={`s("bd sd [rim bd] sd,[~ hh]*4").bank("CasioRZ1") .off(2/16, x=>x.speed(1.5).gain(.25) - .off(3/16, y=>y.vowel("*8")))`} + .off(3/16, y=>y.vowel("*8")))`} /> | name | description | example | diff --git a/website/src/pages/workshop/recap.mdx b/website/src/pages/workshop/recap.mdx index fda7a171..e2b661f5 100644 --- a/website/src/pages/workshop/recap.mdx +++ b/website/src/pages/workshop/recap.mdx @@ -39,7 +39,7 @@ This page is just a listing of all functions covered in the workshop! | --------- | ----------------------------- | --------------------------------------------------------------------------------- | | note | set pitch as number or letter | | | n + scale | set note in scale | | -| stack | play patterns in parallel | | +| $: | play patterns in parallel | | ## Audio Effects diff --git a/website/src/repl/Repl.jsx b/website/src/repl/Repl.jsx index d709d058..9032be28 100644 --- a/website/src/repl/Repl.jsx +++ b/website/src/repl/Repl.jsx @@ -4,264 +4,15 @@ Copyright (C) 2022 Strudel contributors - see . */ -import { code2hash, logger, silence } from '@strudel/core'; -import { getDrawContext } from '@strudel/draw'; -import cx from '@src/cx.mjs'; -import { transpiler } from '@strudel/transpiler'; -import { - getAudioContext, - initAudioOnFirstClick, - webaudioOutput, - resetGlobalEffects, - resetLoadedSounds, -} from '@strudel/webaudio'; -import { defaultAudioDeviceName } from '../settings.mjs'; -import { getAudioDevices, setAudioDevice } from './util.mjs'; -import { StrudelMirror, defaultSettings } from '@strudel/codemirror'; -import { clearHydra } from '@strudel/hydra'; -import { useCallback, useEffect, useRef, useState } from 'react'; -import { settingsMap, useSettings } from '../settings.mjs'; -import { - setActivePattern, - setLatestCode, - createPatternID, - userPattern, - getViewingPatternData, - setViewingPatternData, -} from '../user_pattern_utils.mjs'; -import { Header } from './Header'; -import Loader from './Loader'; -import { Panel } from './panel/Panel'; -import { useStore } from '@nanostores/react'; -import { prebake } from './prebake.mjs'; -import { getRandomTune, initCode, loadModules, shareCode, ReplContext } from './util.mjs'; -import PlayCircleIcon from '@heroicons/react/20/solid/PlayCircleIcon'; -import './Repl.css'; -import { setInterval, clearInterval } from 'worker-timers'; -import { getMetadata } from '../metadata_parser'; - -const { latestCode } = settingsMap.get(); - -let modulesLoading, presets, drawContext, clearCanvas, isIframe; -if (typeof window !== 'undefined') { - initAudioOnFirstClick(); - modulesLoading = loadModules(); - presets = prebake(); - drawContext = getDrawContext(); - clearCanvas = () => drawContext.clearRect(0, 0, drawContext.canvas.height, drawContext.canvas.width); - isIframe = window.location !== window.parent.location; -} - -async function getModule(name) { - if (!modulesLoading) { - return; - } - const modules = await modulesLoading; - return modules.find((m) => m.packageName === name); -} +import { isIframe, isUdels } from './util.mjs'; +import UdelsEditor from '@components/Udels/UdelsEditor'; +import ReplEditor from './components/ReplEditor'; +import EmbeddedReplEditor from './components/EmbeddedReplEditor'; +import { useReplContext } from './useReplContext'; export function Repl({ embedded = false }) { - const isEmbedded = embedded || isIframe; - const { panelPosition, isZen, isSyncEnabled } = useSettings(); - const init = useCallback(() => { - const drawTime = [-2, 2]; - const drawContext = getDrawContext(); - const editor = new StrudelMirror({ - sync: isSyncEnabled, - defaultOutput: webaudioOutput, - getTime: () => getAudioContext().currentTime, - setInterval, - clearInterval, - transpiler, - autodraw: false, - root: containerRef.current, - initialCode: '// LOADING', - pattern: silence, - drawTime, - drawContext, - prebake: async () => Promise.all([modulesLoading, presets]), - onUpdateState: (state) => { - setReplState({ ...state }); - }, - onToggle: (playing) => { - if (!playing) { - clearHydra(); - } - }, - afterEval: (all) => { - const { code } = all; - setLatestCode(code); - window.location.hash = '#' + code2hash(code); - setDocumentTitle(code); - const viewingPatternData = getViewingPatternData(); - const data = { ...viewingPatternData, code }; - let id = data.id; - const isExamplePattern = viewingPatternData.collection !== userPattern.collection; - - if (isExamplePattern) { - const codeHasChanged = code !== viewingPatternData.code; - if (codeHasChanged) { - // fork example - const newPattern = userPattern.duplicate(data); - id = newPattern.id; - setViewingPatternData(newPattern.data); - } - } else { - id = userPattern.isValidID(id) ? id : createPatternID(); - setViewingPatternData(userPattern.update(id, data).data); - } - setActivePattern(id); - }, - bgFill: false, - }); - - // init settings - - initCode().then(async (decoded) => { - let code, msg; - if (decoded) { - code = decoded; - msg = `I have loaded the code from the URL.`; - } else if (latestCode) { - code = latestCode; - msg = `Your last session has been loaded!`; - } else { - const { code: randomTune, name } = await getRandomTune(); - code = randomTune; - msg = `A random code snippet named "${name}" has been loaded!`; - } - editor.setCode(code); - setDocumentTitle(code); - logger(`Welcome to Strudel! ${msg} Press play or hit ctrl+enter to run it!`, 'highlight'); - }); - - editorRef.current = editor; - }, []); - - const [replState, setReplState] = useState({}); - const { started, isDirty, error, activeCode, pending } = replState; - const editorRef = useRef(); - const containerRef = useRef(); - - // this can be simplified once SettingsTab has been refactored to change codemirrorSettings directly! - // this will be the case when the main repl is being replaced - const _settings = useStore(settingsMap, { keys: Object.keys(defaultSettings) }); - useEffect(() => { - let editorSettings = {}; - Object.keys(defaultSettings).forEach((key) => { - if (_settings.hasOwnProperty(key)) { - editorSettings[key] = _settings[key]; - } - }); - editorRef.current?.updateSettings(editorSettings); - }, [_settings]); - - // on first load, set stored audio device if possible - useEffect(() => { - const { audioDeviceName } = _settings; - if (audioDeviceName !== defaultAudioDeviceName) { - getAudioDevices().then((devices) => { - const deviceID = devices.get(audioDeviceName); - if (deviceID == null) { - return; - } - setAudioDevice(deviceID); - }); - } - }, []); - - // - // UI Actions - // - - const setDocumentTitle = (code) => { - const meta = getMetadata(code); - document.title = (meta.title ? `${meta.title} - ` : '') + 'Strudel REPL'; - }; - - const handleTogglePlay = async () => { - editorRef.current?.toggle(); - }; - - const resetEditor = async () => { - (await getModule('@strudel/tonal'))?.resetVoicings(); - resetGlobalEffects(); - clearCanvas(); - clearHydra(); - resetLoadedSounds(); - editorRef.current.repl.setCps(0.5); - await prebake(); // declare default samples - }; - - const handleUpdate = async (patternData, reset = false) => { - setViewingPatternData(patternData); - editorRef.current.setCode(patternData.code); - if (reset) { - await resetEditor(); - handleEvaluate(); - } - }; - - const handleEvaluate = () => { - editorRef.current.evaluate(); - }; - const handleShuffle = async () => { - const patternData = await getRandomTune(); - const code = patternData.code; - logger(`[repl] ✨ loading random tune "${patternData.id}"`); - setActivePattern(patternData.id); - setViewingPatternData(patternData); - await resetEditor(); - editorRef.current.setCode(code); - editorRef.current.repl.evaluate(code); - }; - - const handleShare = async () => shareCode(replState.code); - const context = { - embedded, - started, - pending, - isDirty, - activeCode, - handleTogglePlay, - handleUpdate, - handleShuffle, - handleShare, - handleEvaluate, - }; - - return ( - -
- -
- {isEmbedded && !started && ( - - )} -
-
{ - containerRef.current = el; - if (!editorRef.current) { - init(); - } - }} - >
- {panelPosition === 'right' && !isEmbedded && } -
- {error && ( -
{error.message || 'Unknown Error :-/'}
- )} - {panelPosition === 'bottom' && !isEmbedded && } -
-
- ); + const isEmbedded = embedded || isIframe(); + const Editor = isUdels() ? UdelsEditor : isEmbedded ? EmbeddedReplEditor : ReplEditor; + const context = useReplContext(); + return ; } diff --git a/website/src/repl/components/BigPlayButton.jsx b/website/src/repl/components/BigPlayButton.jsx new file mode 100644 index 00000000..80a4d345 --- /dev/null +++ b/website/src/repl/components/BigPlayButton.jsx @@ -0,0 +1,22 @@ +import PlayCircleIcon from '@heroicons/react/20/solid/PlayCircleIcon'; + +// type Props = { +// started: boolean; +// handleTogglePlay: () => void; +// }; +export default function BigPlayButton(Props) { + const { started, handleTogglePlay } = Props; + if (started) { + return; + } + + return ( + + ); +} diff --git a/website/src/repl/components/Code.jsx b/website/src/repl/components/Code.jsx new file mode 100644 index 00000000..8481cc27 --- /dev/null +++ b/website/src/repl/components/Code.jsx @@ -0,0 +1,21 @@ +// type Props = { +// containerRef: React.MutableRefObject, +// editorRef: React.MutableRefObject, +// init: () => void +// } +export function Code(Props) { + const { editorRef, containerRef, init } = Props; + + return ( +
{ + containerRef.current = el; + if (!editorRef.current) { + init(); + } + }} + >
+ ); +} diff --git a/website/src/repl/components/EmbeddedReplEditor.jsx b/website/src/repl/components/EmbeddedReplEditor.jsx new file mode 100644 index 00000000..06d9c2c1 --- /dev/null +++ b/website/src/repl/components/EmbeddedReplEditor.jsx @@ -0,0 +1,25 @@ +import Loader from '@src/repl/components/Loader'; +import { Code } from '@src/repl/components/Code'; +import BigPlayButton from '@src/repl/components/BigPlayButton'; +import UserFacingErrorMessage from '@src/repl/components/UserFacingErrorMessage'; +import { Header } from './Header'; + +// type Props = { +// context: replcontext, +// } + +export default function EmbeddedReplEditor(Props) { + const { context } = Props; + const { pending, started, handleTogglePlay, containerRef, editorRef, error, init } = context; + return ( +
+ +
+ +
+ +
+ +
+ ); +} diff --git a/website/src/repl/Header.jsx b/website/src/repl/components/Header.jsx similarity index 69% rename from website/src/repl/Header.jsx rename to website/src/repl/components/Header.jsx index 748b84e4..2e8b3094 100644 --- a/website/src/repl/Header.jsx +++ b/website/src/repl/components/Header.jsx @@ -1,47 +1,29 @@ -import AcademicCapIcon from '@heroicons/react/20/solid/AcademicCapIcon'; -import ArrowPathIcon from '@heroicons/react/20/solid/ArrowPathIcon'; -import LinkIcon from '@heroicons/react/20/solid/LinkIcon'; import PlayCircleIcon from '@heroicons/react/20/solid/PlayCircleIcon'; -import SparklesIcon from '@heroicons/react/20/solid/SparklesIcon'; import StopCircleIcon from '@heroicons/react/20/solid/StopCircleIcon'; import cx from '@src/cx.mjs'; -import { useSettings, setIsZen } from '../settings.mjs'; -// import { ReplContext } from './Repl'; -import './Repl.css'; +import { useSettings, setIsZen } from '../../settings.mjs'; +import '../Repl.css'; + const { BASE_URL } = import.meta.env; const baseNoTrailing = BASE_URL.endsWith('/') ? BASE_URL.slice(0, -1) : BASE_URL; -export function Header({ context }) { - const { - embedded, - started, - pending, - isDirty, - activeCode, - handleTogglePlay, - handleEvaluate, - handleShuffle, - handleShare, - } = context; +export function Header({ context, embedded = false }) { + const { started, pending, isDirty, activeCode, handleTogglePlay, handleEvaluate, handleShuffle, handleShare } = + context; const isEmbedded = typeof window !== 'undefined' && (embedded || window.location !== window.parent.location); - const { isZen } = useSettings(); + const { isZen, isButtonRowHidden, isCSSAnimationDisabled } = useSettings(); return (